C++ 无法在命名空间范围上分配变量
我遇到了一些不清楚的事情:C++ 无法在命名空间范围上分配变量,c++,c++11,c++14,C++,C++11,C++14,我遇到了一些不清楚的事情: namespace Foo { int a; } namespace Foo { // Foo::a = 2; // Why can't do an assignment here? void b() { Foo::a = 2; // OK } } 输出 error: ‘a’ does not name a type 我很好奇为什么我们不能在命名空间范围上赋值 功能块内的赋值是否正常 有什么想法吗 我很好奇为什么命名空间范围中的
namespace Foo {
int a;
}
namespace Foo {
// Foo::a = 2; // Why can't do an assignment here?
void b() {
Foo::a = 2; // OK
}
}
输出
error: ‘a’ does not name a type
我很好奇为什么我们不能在命名空间范围上赋值
功能块内的赋值是否正常
有什么想法吗
我很好奇为什么命名空间范围中的赋值被视为定义
赋值是表达式语句,表达式不能在命名空间范围内。命名空间范围中只能有声明语句(定义是声明)
而功能块内的赋值不是
表达式语句可以在块范围内。不能在函数外使用常规语句 也许您首先需要一个声明,然后是一个定义 像
赋值表达式如何合法地出现在名称空间范围内?您的代码示例在某种程度上根本没有太多的链接代码。您是从哪里获得“@codekaizer”的“错误:重复定义”的?哪个编译器会发出这样的错误@VTT,我使用的是在线编译器-@codekaizer它是gcc 6.3,它没有发出声明的错误,而是报告“error:”命名空间“Foo”中的“a”没有命名类型“谢谢”。有道理。我很难在这本书中找到那条规则。你知道我在哪里可以找到更多关于“一般声明”的规则吗?@codekaizer没有“一般声明”这样的术语。我的意思是几乎所有不是声明或定义的东西(或多或少)。
namespace Foo {
extern int a; // Declare variable
}
namespace Foo {
int a = 2; // Define and initialize the variable
}