【发布时间】:2020-05-16 08:07:27
【问题描述】:
如果我有一个标题:
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 文件,因此无法编译代码。请参阅答案以获取原始问题的答案。谢谢大家!
编辑:
这是一个我无法编译的例子:
测试.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 文件中显示为灰色。
【问题讨论】:
-
我认为问题在于你的编译方式。
-
好的,那么上面的例子理论上应该可行吗?我还有其他问题,对吗?
-
无法重现:godbolt.org/z/N7fDhz
-
添加编辑示例。
-
但编译器输出与函数不匹配?这里可能有一个很好的问题 - 需要再次编辑。
标签: c++ namespaces inline