c++ 访问外部布尔值时出现未定义的符号错误

s4n0splo  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(138)

我有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的匿名命名空间中定义的
我错过了什么?

rkue9o1l

rkue9o1l1#

::org::lib::masterBool::(unnamed)::masterBool不是相同的变量,并且从未定义过。(即使未命名的名称空间出现在org::lib中,它们也不会相同。)没有两个otherFunction(在任何一个翻译单元中-请参见下文),因此该问题不会在那里发生。
更一般地,don'tuse在头文件中未命名的命名空间;即使是罕见的recommendations也可以通过inline变量(或者在C++17之前对它们进行一些模拟)来更好地处理。

相关问题