我在每个文件中省略了#include "stdafx.h
。
stdafx.h(预编译头文件)
#include a.h
#include b.h
class stuff;
stuff * s
A.H
class thing{float f; void fun()};
a.cc
void thing::fun(){}
thing::thing():
f(b->f) {} // lnk 2005 linking error
b.h
struct stuff
{
float f;
thing * t;
};
b.cc
stuff::stuff(): f(3.4) { t = new thing; }
main.cc
int main()
{
s = new stuff;
s -> fun();
}
如您所见,我尝试访问stdafx.h中预先声明的s
我正在进行这种设计,所以我不必依赖单身人士(我有一个主要类,我想在其他较小的对象中访问)
我是否需要以某种方式使用extern
关键字?预编译头是否会导致问题?
答案 0 :(得分:1)
在stdafx.h中,你已经声明了s,但是你从未定义它。我会:
extern
添加到stdafx.h 在main.cc中添加s的定义,如下所示:
stuff * s = NULL;
答案 1 :(得分:0)
我建议删除全局变量。它们很危险,因为任何任务都可以读写它。在多线程和多任务系统中,控制对全局变量的访问变得必要且更复杂。
在我目前的项目中,我要求没有全局变量。可以有getter和setter的静态局部变量。使用getter和setter可以滑动模式以防止出现多任务问题。
尽力摆脱全局变量。你已经发现了一个针对他们的问题。
答案 2 :(得分:0)
通过重新设计代码解决了这个问题。 C ++使用起来不是很干净。