C++ 内联命名空间是否隐式内联其函数?

C++ Does inlining a namespace implicitly inline its functions?

如果我有 header 并且:

namespace outer {
    inline namespace inner {
        void func();
    }
}

然后我无法在单独的 .cpp 文件中定义 func(),因为这会给我一个编译错误:

- undefined reference to 'outer::inner::func()'

就像我将函数声明为内联一样。这样对吗?这是否意味着内联命名空间会隐式内联其函数。我试着查看 https://en.cppreference.com/w/cpp/language/namespace 但找不到任何明确说明的地方。

编辑 2: 无视,先前的编辑。我未能正确配置我的 cmake 文件,因此无法编译代码。请参阅答案以获取原始问题的答案。谢谢大家!

编辑:

这是一个我无法编译的例子:

Test.h

namespace Core {
    inline namespace TestNameSpace {
        void write();
    }
}

Test.cpp

#include <iostream>
#include "Test.h"

void Core::write() {
    std::cout << "BAJS\n";
}

main.cpp

#include "Test.h"
int main() {
    Core::write();
    return 0;
}

我应该注意,#include "Test.h" 在我的 IDE 文件中是灰色的 Test.cpp 文件。

简单的回答是:没有。您绝对可以在单独的 cpp 文件中定义函数。 inline 在命名空间上基本上可以使您不需要指定命名空间名称。例如,您可以 outer::func() 而不是 outer::inner::func()

参见[namespace.def]/5-7。对于必须在哪里定义函数没有任何限制,并且它隐式地内联它们。

您遇到的错误与您的编译方式有关。您可能忘记编译 .cpp 文件,或者至少 link 将其编译到调用它的位置。