为什么我不能为命名空间中的变量赋值?

zha*_*eng 1 c++ namespaces

我的代码如下所示,当我编译它时,我收到此错误:

two.cpp:5:错误:在'='标记之前的预期构造函数,析构函数或类型转换

#include <iostream>
using namespace std;
namespace a1{
    int a=3;
    a=4;
}

int main(){
    cout << a1::a<<endl;
}
Run Code Online (Sandbox Code Playgroud)

我在两个文件中定义了一个命名空间时遇到了这个问题,在第二个文件中,我无法为第一个文件中定义的变量赋值.

我正在学习初学ANSI C++,并且在书中找不到任何关于此的信息.

Che*_*Alf 5

您可以在命名空间范围内声明(包括您可以拥有定义的声明),例如

int a = 3;
Run Code Online (Sandbox Code Playgroud)

但是在命名空间范围内不能有非声明语句.

例如,如

a = 4;
Run Code Online (Sandbox Code Playgroud)

不是宣言:它纯粹要求一种效果.

但是,您可以将其放在函数体中,例如main.

干杯&hth.,


Bil*_*ter 5

命名空间的目的是避免名称冲突。因此,请用命名空间包围变量和类声明。但命名空间本身并不提供运行代码的脚手架。你的 a=4; 是怎么回事?陈述 ?应该在哪里执行?您需要将其放在函数或方法中,而不是放在命名空间中。