c++头文件中的命名空间
namespaces from header files in c++
我在header中创建了一个带有一些变量的命名空间,希望在.cpp中初始化它们,并在main.cpp中查看。一个不具名的命名空间,我希望工作得很好,而不用在.cpp中提到这个命名空间。然而,我得到错误,如果在。cpp我有一个全新的a和b。有人知道如何解决它吗?
xx.h
namespace
{
int a;
int b;
}
. cpp
#include "xx.h"
a = 5;
b = 10;
main.cpp
#include <iostream>
#include "xx.h"
int main()
{
std::cout << "values" << a << b << std::endl;
}
不能在函数外部使用赋值语句。你只能声明或/和定义对象。所以有效代码是
namespace
{
int a = 5;
int b = 10;
}
main.cpp
#include <iostream>
#include "xx.h"
int main()
{
std::cout << "values" << a << b << std::endl;
}
考虑在未命名的名称空间中声明的对象具有内部链接。这意味着如果该头文件包含在多个模块中,则在每个模块中声明一个单独的命名空间。
考虑下面的例子
unnamed.h
namespace
{
int a = 5;
int b = 10;
}
void f();
second.cpp
#include <iostream>
#include "unnamed.h"
void f()
{
a = 10; b = 5;
std::cout << "a = " << a << ", b = " << b << std::endl;
}
main.cpp # include# include"unnamed.h"
int main()
{
f();
std::cout << "a = " << a << ", b = " << b << std::endl;
return 0;
}
输出为
a = 10, b = 5
a = 5, b = 10
问题不在于匿名命名空间。变量不能在全局范围内赋值。
// At global scope
int num;
num = 10; // Error. You are doing something similar.
要么在命名空间中初始化变量,要么在函数中赋值
你的头必须声明它们为extern,在CPP中你必须定义它们。(否则任何包含文件将创建自己的a
和b
)
这可能有效(由于匿名命名空间,不太确定):
xx.h
namespace
{
extern int a;
extern int b;
}
. cpp
#include "xx.h"
int a = 5;
int b = 10;
main.cpp
#include <iostream>
#include "xx.h"
int main()
{
std::cout << "values" << a << b << std::endl;
}
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- Qt C++:不同文件中同一命名空间的多个Q_NAMESPACE
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 使用命名空间在另一个".cpp"文件中定义
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 是否将命名空间范围文件本地 (.cpp) 常量放在匿名命名空间中
- 模板实现文件中的匿名命名空间
- C++-使用来自不同头文件、相同命名空间的枚举
- C++ 如何在 def 文件中指定命名空间
- 在实现文件中,我们应该更喜欢"using namespace"指令还是将实现包装在命名空间 { } 中?
- 在头文件中添加命名空间函数
- 在多个 cpp 文件中重用未命名的命名空间函数
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- 跨命名空间的友元类和不同的.H 文件
- 我可以在应用程序之间更改 .proto 文件的命名空间吗?
- 试图将两个类放在同一命名空间中的单独文件中,但只有#1个#Class类作品
- C++中的头文件和命名空间
- 为什么主可执行文件和 dlopen 加载的共享库共享命名空间静态变量的一个副本?
- 包含所有命名空间 std 的文件