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

标签 c++ namespaces inline

如果我有一个标题:

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/

相关文章:

c++ - 从线程访问对象(使用引用或指针)

c++ - 我可以在头文件中实现所有 C++ 成员函数但不用于内联吗?

c++ - std::set 中打印的垃圾值

c++ - 错误 LNK2038 : mismatch detected for '_MSC_VER' : value '1800' doesn't match value '1900'

c++ - 崇高文本 : compiler build options

python - 无法导入twisted的互联网模块

python - 为什么 R 和 Python 中加载包的默认命名空间行为不同?

namespaces - 使用 C++/CLI 时的长/复合命名空间

matlab symfun 与匿名函数

Django表单通过多对多字段链接2个模型