我在默认/“根”命名空间中定义了两个命名空间,即nsA和nsB。 nsA有一个子命名空间nsA::subA。当我尝试从nsA::subA内部引用属于nsB的函数时,出现错误消息:
undefined reference to `nsA::subA::nsB::theFunctionInNsB(...)'
有任何想法吗?
最佳答案
需要更多信息来解释该错误。以下代码很好:
#include <iostream>
namespace nsB {
void foo() { std::cout << "nsB\n";}
}
namespace nsA {
void foo() { std::cout << "nsA\n";}
namespace subA {
void foo() { std::cout << "nsA::subA\n";}
void bar() {
nsB::foo();
}
}
}
int main() {
nsA::subA::bar();
}
因此,虽然指定全局 namespace 可以解决您当前的问题,但通常可以在nsB中引用不带符号的符号。否则,无论何时在另一个 namespace 范围中,都必须编写:: std::cout,:: std::string等。而你没有。 QED。
指定全局 namespace 是用于当前范围中还有另一个nsB可见的情况-例如,如果nsA::subA包含其自己的 namespace 或名为nsB的类,并且您要调用:: nsbB:foo而不是nsA::subA: :nsB::foo。因此,如果您声明(但未定义)nsA::subA::nsB::theFunctionInNsB(...),则会得到引用的错误。您是否可能从 namespace subA内部#include了nsB的 header ?