我在默认/“根”命名空间中定义了两个命名空间,即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 ?

10-06 11:24