仅供参考:这不是一个完整的程序,但几乎与我的一样。 据我所知,
我有一个头文件:
header.cpp
extern int global_x;
mainWindow.cpp
#include "header.cpp"
int global_x=1;
a.cpp
#include "header.cpp"
int global_x;
cout << global_x;
但是我的global_x是0 ...为什么?????如果我取出global_x那么它将无法编译。 有人可以举一个QT中解决这个问题的简单程序的例子吗?我在网上看了很多东西,但大多数C使用extern和C ++没那么多。感谢。
答案 0 :(得分:0)
基本上,当你编译你的程序时,包含文件就像这样:
<强> a.cpp 强>
extern int global_x;
int global_x;
cout << global_x;
正如您所看到的,当您尝试编译a.cpp时,global_x永远不会初始化为1.而是默认初始化为0(因为它是全局的)。这就是为什么你把它看作0的原因。
答案 1 :(得分:0)
首先,您遇到了链接问题,当您从mainWindow.o
链接该程序时,您不会包含app.cpp
。因此,链接器抱怨缺少global_x
。如果您正在使用Qt(已标记),并设法做到这一点,那么您可能做错了。
然后您将另一个 global_x
添加到app.cpp
,并将其保留为默认值零(如果您未明确初始化它们,则全局和静态变量具有此值)。
因此,总而言之,就构建系统而言,mainWindow
似乎不属于您的应用程序。解决了这个问题。