我更喜欢JAVA,但是当HI-Perf在需求列表中时,C / C ++必须出现在桌面上。它确实如此。并且,正如预期的那样,我偶然发现了一些我无法理解的东西,也无法在SO中挖掘出来。所以任何人都可以解释一下为什么在下面的标题中没有监护人工作?
// a0a.h
#ifndef _A0A
#define _A0A
class State {
public:
static State* A;
}
State* State::A = new State(); /* this is going to be troublesome */
#endif
B.h // #include "a0a.h"
C.h // #include "a0a.h"
XXX.h // #include "B.h"
XXX.h // #include "C.h"
和编译在上面指出的行上给出了一个多重定义错误。
我已经通过将该行移至.cpp源文件来实现它,但我仍然想知道为什么守护者不保护我在这里自己射击?
我希望我不必告诉我这只是一个反映我所做事情的虚拟代码 - 而不是我写的实际代码。
修改的
Repeated Multiple Definition Errors from including same header in multiple cpps没有解释为什么。我的意思是我没有得到任何答案的图片 - 他们只是提出建议(我都不需要)。
当然,我可以深入了解书籍,并且可能会了解所有这些如何让编译器在我的控制台中打喷嚏,但是要求SO更快,最有可能帮助其他人理解。
答案 0 :(得分:0)
State::A
的定义。如果多次包含,则State::A
将有多个定义,这是不合法的:链接器将发出错误。要避免这种情况,请在实现文件(* .cpp)中定义State::A
。