2011-09-11 85 views
1

我的代码是像下面,当我编译它,我收到此错误:为什么我不能为命名空间中的变量赋值?

two.cpp:5: error: expected constructor, destructor, or type conversion before '= ' token

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

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

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

我在学习Beginning ANSI C++,并且在本书中找不到关于此的任何信息。

回答

4

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

+0

Re“应该在哪里执行”,使它正确执行的地方很简单,就像这样:'bool const bah =(a = 4);'。由于这个构造执行得很好,所以“应该在哪里执行”这个问题会增加一些重量。你的想法是什么? –

+0

@Alf我必须承认我不懂你的结构'const bah =(a = 4);'我会认为无论是作业还是初始化(a = 4)都有int类型而不是bool。 –

0

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

+0

是的,第二个文件包含第一个文件。 – zhangcheng

5

您可以在命名空间范围(例如,您可以拥有定义)进行声明。

int a = 3; 

但你不能在命名空间内非声明语句。

例如,分配如

a = 4; 

不是声明:它纯粹询问的效果。

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

干杯&心连心,

相关问题