在C程序中实现全局结构
发布时间:2020-12-16 10:16:33 所属栏目:百科 来源:网络整理
导读:我正在尝试创建全局结构,这将从源代码的任何部分看出.我需要它用于我的大型Qt项目,需要一些全局变量.这是:3个文件(global.h,dialog.h main.cpp).对于编译,我使用Visual Studio(Visual C). global.h #ifndef GLOBAL_H_#define GLOBAL_H_typedef struct TNumb
我正在尝试创建全局结构,这将从源代码的任何部分看出.我需要它用于我的大型Qt项目,需要一些全局变量.这是:3个文件(global.h,dialog.h& main.cpp).对于编译,我使用Visual Studio(Visual C).
global.h #ifndef GLOBAL_H_ #define GLOBAL_H_ typedef struct TNumber { int g_nNumber; } TNum; TNum Num; #endif dialog.h #ifndef DIALOG_H_ #define DIALOG_H_ #include <iostream> #include "global.h" using namespace std; class ClassB { public: ClassB() {}; void showNumber() { Num.g_nNumber = 82; cout << "[ClassB][Change Number]: " << Num.g_nNumber << endl; } }; #endif 和main.cpp #include <iostream> #include "global.h" #include "dialog.h" using namespace std; class ClassA { public: ClassA() { cout << "Hello from class A!n"; }; void showNumber() { cout << "[ClassA]: " << Num.g_nNumber << endl; } }; int main(int argc,char **argv) { ClassA ca; ClassB cb; ca.showNumber(); cb.showNumber(); ca.showNumber(); cout << "Exit.n"; return 0; } 当我试图构建这个小应用程序时,编译工作正常,但链接器给我一个错误: 1> dialog.obj:错误LNK2005:“struct TNumber Num”(?Num @@ 3UTNumber @@ A)已在main.obj中定义 有没有解决方案? 谢谢. 解决方法
是.首先,不要在头文件中定义num.在标题中将其声明为extern,然后创建一个文件Global.cpp来存储全局,或者将其放在main.cpp中,如Thomas Jones-Low的回答所示.
其次,不要使用全局变量. 第三,在C中为此目的不需要typedef.您可以像这样声明您的结构: struct TNum { int g_nNumber; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |