CPP - 为什么监护人没有保护我免受多重定义的影响?
cpp - why didn't guardian protect me from multiple definitions?
我更喜欢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源文件中实现了这一点,但我仍然想理解为什么守护者没有保护我不在这里开枪?
我希望我不必说这只是一个反映我所做的事情的伪代码,而不是我正在写的实际代码。
编辑
在多个cpp中包含相同的头导致重复的多个定义错误并不能解释为什么。我的意思是,我没有从这些答案中了解情况——它们只是给出了建议(我不需要这些建议)。
当然,我可以深入阅读书籍,并可能了解所有这些是如何让编译器在我的控制台上打喷嚏的,但询问是SO要快得多,很可能会帮助其他人理解。
- "守护者"避免在同一文件中包含多个
- 每次包含标头时,都会包含
State::A
的定义。如果多次包含,则State::A
将有多个定义,这是不合法的:链接器将发出错误。要避免这种情况,请在实现文件(*.cpp)中定义State::A
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- CPP - 为什么监护人没有保护我免受多重定义的影响?
- 为什么删除复制构造函数会影响用户定义的默认构造函数?
- 定义多个名称相同但类型的函数如何影响C++编译器的性能?
- 在C++中,"static initialization fiasco"是否仅影响对另一个模块中定义的对象的数据成员的引用?
- 为C++结构定义显式析构函数如何影响调用约定
- char的实现定义是否会影响std::string
- 对受内联构造函数影响的vtable错误的未定义引用
- C++11 重新定义删除,而不影响 =delete
- 如何影响COMBOBOX窗口类的定义
- #在单独的文件中定义值,它将如何影响编译
- 重新定义派生类的继承内部函数以对基类产生影响