如果我有一个标题:
namespace outer {
inline namespace inner {
void func();
}
}
然后我无法在单独的 .cpp 文件中定义 func()
,因为这会给我一个编译错误:
- 对“outer::inner::func()”的 undefined reference
就像我将函数声明为内联一样。它是否正确?这是否意味着内联命名空间隐式内联其函数。我尝试查看 https://en.cppreference.com/w/cpp/language/namespace但找不到任何地方明确说明这一点。
编辑2: 忽略之前的编辑。我未能正确配置我的 cmake 文件,因此无法编译代码。请参阅答案以获取原始问题的答案。谢谢大家!
编辑:
这是一个我无法编译的示例:
测试.h
namespace Core {
inline namespace TestNameSpace {
void write();
}
}
测试.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 文件,或者至少将其链接到调用它的位置。
关于C++ 内联命名空间是否隐式内联其函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59990596/