我有driver.h
,其中包含:
namespace org::lib{
extern bool masterBool;
}
以及library.h
,其中包含定义masterBool
的匿名命名空间:
namespace {
bool masterBool = false;
std::string otherFunction(){
//....
}
}
我的driver.cpp
即调用了otherFunction()
和masterBool
:
#include driver.h
#include library.h
namespace org::lib{
void function(){
otherFunction();
if (masterBool){
//.....
}
}
}
编译时,我得到一个未定义的符号:org::lib::masterBool
。但是,otherFunction()
调用没有这样的错误,即使它们都是在library.h
的匿名命名空间中定义的
我错过了什么?
1条答案
按热度按时间rkue9o1l1#
::org::lib::masterBool
与::(unnamed)::masterBool
不是相同的变量,并且从未定义过。(即使未命名的名称空间出现在org::lib
中,它们也不会相同。)没有两个otherFunction
(在任何一个翻译单元中-请参见下文),因此该问题不会在那里发生。更一般地,don'tuse在头文件中未命名的命名空间;即使是罕见的recommendations也可以通过
inline
变量(或者在C++17之前对它们进行一些模拟)来更好地处理。