c++命名空间从不同的源文件
c++ namespace from different source file
我有一个名为test1.cpp的文件
namespace a {
int main1() {
return 3;
}
}
还有另一个文件test2。cpp
#include <stdio.h>
using a::main1;
int main() {
printf("%d", a::main1());
}
然后我得到一个编译错误说'a' has not been declared
与g++。请帮我找出我在这里错过了什么,以及通常如何做到这一点。
谢谢。
您必须在头文件中声明命名空间,类和函数,并将其包含在test2.cpp
文件中。
您需要在头文件中声明a::main1,将其命名为test1.h,然后将该头文件包含在test2.h中。否则test2无法知道你在test1中声明了什么。
test1.h
namespace a {
int main1();
}
test1.cpp
namespace a {
int main1() {
return 3;
}
}
test2.cpp
#include <stdio.h>
#include test1.h
using a::main1;
int main() {
printf("%d", a::main1());
}
你的函数main1()
是在名称空间'a'中声明的,所以当你在printf()
中调用它时,你需要确保编译器知道要在哪个名称空间中查找它。(据我所知)有两种方法:
-
您可以使用
::
显式调用命名空间,就像您所做的那样:printf ("%d", a::main1());
-
或者你可以,在它第一次使用的地方,告诉编译器通常在'a'命名空间中查找符号,使用以下行:
using namespace a;
当我同时使用这两种技术时,我使用的编译器(MS Studio 2008)没有抱怨。
我相信你得到错误的原因是你的"using"语句没有正确地为编译器形成(见上文)。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- 命名空间中的unordered_map不会跨源文件"saving"其数据
- 源文件中的未命名命名空间和局部变量
- 使用 clang 解析命名空间:在另一个源文件中包含标头或直接解析标头时,AST 差异
- c++命名空间从不同的源文件
- 源文件中的私有命名空间
- 多个C++源文件中使用的命名空间