namespace myspace { int x } 为什么 `myspace::x=3;` 会报错?

namespace myspace { int x } Now why `myspace::x=3;` gives error?

代码

#include <iostream>
namespace myspace
{
    int x;
}

myspace::x=3; // This line is giving error.
int main()
{
    myspace::x=5;
    return 0;
}

输出

Error: C++ requires a type specifier for all declarations

那么,为什么第 myspace::x=3; 行给出 C++ 需要所有声明的类型说明符的错误?

声明

myspace::x=3;

不是初始化,而是简单的赋值。跟

没什么区别
myspace::x=5;

你有 main 函数。

任何不是声明或定义的语句都不能在函数外部。

如果要初始化变量,在定义处进行:

namespace myspace
{
    int x = 3;
}

您在第一次声明变量时提供了定义。正如其他人指出的那样,myspace::x=3; 构成命名空间范围内的赋值表达式,这是不允许的。

如果您想在不定义变量的情况下声明它,您需要明确并指定它是一个 extern 声明。

namespace myspace
{
    extern int x;
}

定义仍然需要类型说明符(所有定义都需要),但它看起来有点像您想象的那样

int myspace::x = 3;

虽然所有这些都很好,但全局变量(可变的,运行-time 外部类型)是一种代码味道。所以最好不要养成使用它们的习惯。