C++ : Is Namespaces definition allowed before '#include <files>' .

标签 c++ namespaces

我在多个文件中使用了一个命名空间,并且我通过脚本(main 除外)在每个文件的开头插入了“namespace abc {”并在结尾插入了“}”。因此“#include”位于每个文件的命名空间下。 当我编译时,它不起作用(无法识别系统功能等)。

但是,如果我在“#include”行之后定义 namespace ,则一切正常。 这里有什么问题?

最佳答案

问题是,通过将 header 放在命名空间中,您让它们在该命名空间中声明函数——但这些函数的定义(实现)不存在于该命名空间中,因此当您链接时,它们找不到,链接失败。

举一个具体的例子,假设您有一个 header 声明了一个函数 int f(int)。通过将其包含在命名空间的大括号内,您将其转换为 int somenamespace::f(int) 的声明。

虽然 int::f(int) 已定义,但 int somenamespace::f(int) 尚未定义,因此无法链接。

请注意,这不适用于 extern "C" 函数。他们基本上忽略了命名空间,所以(例如)像这样:

namespace x {
    #include <stdio.h>
} 

不会影响 stdio.h 中的正常 C 函数。

关于C++ : Is Namespaces definition allowed before '#include <files>' .,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9597371/

相关文章:

带有 .begin() 和 .end() 的 C++ const char

php - 设置关系时 User::class 和 App\User 有什么区别?

php - 命名空间在 Laravel 中不起作用

c++ - 我如何使用 ifstream 从 FIFO 中读取信息?

c++ - 拆分字符串输入并查找字符是否有效

python - 实例化时如何引用传递给我的类的对象?

php - 使用 PHP 为 XML 标记设置命名空间

c++ - 从作为参数传递的函数中提取参数

python - 如何从测试脚本中运行 WAF 编译的 C++ 程序?

c++ - 如何查找 std::deque 是否持有给定对象?