我更喜欢 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 源文件来使其工作,但我仍然想了解为什么监护人不保护我免于在这里开枪?
我希望我不必说这只是一个反映我所做的虚拟代码——而不是我正在编写的实际代码。
编辑
在多个 cpps 中包含相同的标头导致重复的多个定义错误不能解释为什么。我的意思是我没有从任何这些答案中得到图片——他们只是给出建议(我都不需要)。
当然,我可以深入阅读书籍,并可能了解所有这些如何使编译器在我的控制台中打喷嚏,但询问是否如此更快,并且很可能会帮助其他人理解。