C++11 无法解析嵌套命名空间

C++11 cannot resolve nested namespace

假设我在 namespace Fooo 下的 foo.h 中创建了一个 class Foo,如下所示:

foo.h:

namespace Fooo {
    class Foo {
    };
}

及其对应的源文件:

foo.cpp:

namespace Fooo {
Foo::Foo() {
}
} 

我编写了另一个源文件 util.cpp 来为 util.cpp 中的 Foo class 创建一些实用函数:

util.cpp:

namespace Fooo {
    namespace util {
        void helper() {
        }
    }
}

现在在 main.cpp 中,当我调用 Fooo::util::help() 时,编译器会给我以下错误:

error: no member named 'util' in namespace 'Fooo'

对此有什么想法吗?这对我来说真的很奇怪。

注意:我使用的是支持 -std=c++11 的 clang++ 3.6。

您可能想在 .h 文件中声明帮助程序并将该文件包含在 main.cpp 中。

问题是编译单元 main.cpp 没有得到这个函数的声明。对于编译器来说,没有这样的功能。

至少,编译器需要知道它接受什么参数,以便生成代码来调用它。