C++ 外部变量的放置

C++ 外部变量的放置,c++,extern,C++,Extern,所以我在main中的头列表下面声明了4个外部变量 我在GUI源代码中的click event listener函数中定义了4个变量。代码已编译 现在重新组织事件侦听器函数,我决定将一些代码放入另一个函数中,该函数由事件侦听器函数调用。它不会编译,编译器说这4个变量是未声明的标识符 我的印象是全局变量应该在任何地方使用。。。如果是的话,为何这宗个案并非如此 // 4 extern variables extern QXlsx::Document BreastCancer; extern QXlsx

所以我在main中的头列表下面声明了4个外部变量

我在GUI源代码中的click event listener函数中定义了4个变量。代码已编译

现在重新组织事件侦听器函数,我决定将一些代码放入另一个函数中,该函数由事件侦听器函数调用。它不会编译,编译器说这4个变量是未声明的标识符

我的印象是全局变量应该在任何地方使用。。。如果是的话,为何这宗个案并非如此

// 4 extern variables
extern QXlsx::Document BreastCancer;
extern QXlsx::CellRange Range;
extern QXlsx::CellReference BottomLeft;
extern std::vector<patient_data> patients;

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);

    Neutropenia_Main w;
    w.show();

    return a.exec();
}


//declaration
void Neutropenia_Main::on_Load_Patient_Data_clicked()
{


您在函数中声明的变量是局部变量,它们不是外部变量。要使它们在外部可见,您需要在函数外部声明它们。什么是QXlsx?类?名称空间?您需要在头文件中声明全局变量,并在使用它们的任何地方包含此文件。然后,您需要精确地定义它们注意一个源文件。注意单词的粗略,它们是不同的。作为一个主动的建议,全局变量是尼安德特人,尽量避免在你的设计中。Fred Larson,QXlsx是一个与Excel的接口类。C++中的xLSX文件。
QXlsx::Document BreastCancer("Breast_Cancer.xlsx");
QXlsx::CellRange Range = BreastCancer.dimension();
QXlsx::CellReference BottomLeft = Range.bottomLeft();
int bottomrow = BottomLeft.row();
std::vector<patient_data> patients(bottomrow-1);

extractfromxlsx(bottomrow); // function call

void extractfromxlsx(int bottomrow ){
    patient_data temppatient;
    QVariant tempdata;
    for (int i  = 2; i < bottomrow; i++)
        {
            temppatient.setCaseNumber(BreastCancer.read(i,1));// compiler says BreastCancer is undefined

            tempdata = BreastCancer.read(i,2);
            temppatient.setGender(tempdata.toInt());