我在 header 中创建了一个带有一些变量的 noname 命名空间,想在 .cpp 中初始化它们并在 main.cpp 中查看。一个 noname 命名空间,我希望在 .cpp 中没有提到这个命名空间的情况下工作得很好。但是我得到了错误,好像在 .cpp 中我有全新的 a 和 b。任何人都知道如何解决它?
xx.h
namespace
{
int a;
int b;
}
.cpp
#include "xx.h"
a = 5;
b = 10;
主要.cpp
#include <iostream>
#include "xx.h"
int main()
{
std::cout << "values" << a << b << std::endl;
}
最佳答案
您不能在函数外使用赋值语句。您只能声明或/和定义对象。所以有效代码将是
namespace
{
int a = 5;
int b = 10;
}
主要.cpp
#include <iostream>
#include "xx.h"
int main()
{
std::cout << "values" << a << b << std::endl;
}
考虑到在未命名命名空间中声明的对象具有内部链接。这意味着如果此 header 包含在多个模块中,则在每个模块中它都声明一个单独的命名空间。
考虑下面的例子
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 "unnamed.h"
int main()
{
f();
std::cout << "a = " << a << ", b = " << b << std::endl;
return 0;
}
输出是
a = 10, b = 5
a = 5, b = 10
关于c++ - C++中头文件的 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540208/