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

时间:2011-09-11 01:55:30

标签: c++ namespaces

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

  

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

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

int main(){
    cout << a1::a<<endl;
}

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

我正在学习开始使用ANSI C ++,但在本书中找不到任何有关此内容的信息。

3 个答案:

答案 0 :(得分:5)

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

int a = 3;

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

例如,

等作业
a = 4;

不是声明:它纯粹要求效果。

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

干杯&amp;第h。,

答案 1 :(得分:4)

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

答案 2 :(得分:0)

你的第二个文件是否知道int a的定义; ?命名空间不像其他语言一样神奇地工作,你仍然必须在另一个文件中包含一个包含int a定义的头文件,或者在列表中将它定义为外部。