c++ - C++中头文件的 namespace

标签 c++ namespaces header-files

我在 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;
}

ma​​in.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/

相关文章:

php - 如何在 Yii2 项目中添加 PHP 请求

c++ - 为什么对 isnan 的调用没有歧义? a.k.a. 使用引入 2 次相似函数声明的关键字

c - 当一个结构在单独的文件中定义时,如何将它们嵌套到另一个结构中?

c - 需要解决 "multiple definition"错误的方法

c++ - 如何选择一个类来动态实例化?

c++ - 是否允许 C++ 编译器/链接器删除未使用的方法?

.net - 有什么方法可以拥有一个具有替代名称的命名空间?

linux-kernel - Centos Kernelheaders 包括来自 future 内核的更改

c++ - 将文件与更改数据同步的最佳方法

c++ - 帮助处理奇怪的内存行为。在我的大脑和代码中寻找漏洞