C++ 我们可以通过在类外定义一个类变量来生成全局变量吗;点“;操作人员

C++ 我们可以通过在类外定义一个类变量来生成全局变量吗;点“;操作人员,c++,variable-assignment,C++,Variable Assignment,为什么我们不能写这个b1.x=10在主功能之外? 如果我们写入b1.x=10,则显示错误在主函数之外,为什么?因为,b1.x=10是一个赋值语句,不能出现在文件范围中 但是,您可以使用初始化来提供初始值。差不多 class abc { public: int x; }; abc b1; b1.x=10; int main() { } 您所做的是给变量赋值。这不能在函数之外完成 您可以做的是在声明变量时初始化该变量 abc b1 = {10}; 你试图将程序性语句置于任

为什么我们不能写这个
b1.x=10在主功能之外?

如果我们写入
b1.x=10,则显示错误在主函数之外,为什么?

因为,
b1.x=10是一个赋值语句,不能出现在文件范围中

但是,您可以使用初始化来提供初始值。差不多

class abc
{
    public:
    int x;
};

abc b1;

b1.x=10;

int main()
{

}

您所做的是给变量赋值。这不能在函数之外完成

您可以做的是在声明变量时初始化该变量

abc b1 = {10};

你试图将程序性语句置于任何函数之外;这是不允许的。这可能令人困惑的原因有两个:

1) 也许您已经习惯了可以在任何函数之外使用代码的语言。例如,在perl中,整个文件是一个执行的脚本,定义和调用函数完全是一个选择问题。在C++中不是这样;用于执行go in函数的语句


2)
b1.x=10
可能类似于一个声明,它确实可以超出任何函数。但事实并非如此。这是一份声明。相比之下,函数外部的
int x=10
是一个定义(一种声明类型,它恰好包含一个与赋值表达式语句非常相似的初始值设定项)。

我不完全理解你的问题,因为它太短,解释不多,但我会试一试

如果您试图在函数作用域之外赋值,则C++不允许这样做。C++不象Python/JavaScript那样工作,在这里用点运算符赋值,并且允许在范围之外写入它们。


如果试图在作用域外将class x变量设置为始终为10,则查找的是静态变量。

类成员是在类内定义的,而不是在类外定义的:

abc b1 = { 10 };

你的部分问题是你认为
b1.x
是一个类成员。这会混淆类和对象
abc
是一个类,
abc::x
是一个类成员
b1.x
是对象的成员。您不能定义对象的成员。

为什么不在提问之前尝试编译它?@SouravGhosh那么它们至少应该包含错误消息。我们很可能会找到一个复制目标。如果我们可以在函数外部定义任何非类变量使其成为全局变量,为什么我们不能在函数外部定义类变量或非类变量?@sampadsaha:实际上,因为
sizeof(class abc)
必须有一个值。如果以后可以添加其他成员,
sizeof
将无法工作。为什么我们不能定义类的变量或函数外部的类变量,如果我们可以定义函数外部的任何非类变量使其成为全局变量,那么“定义”作用域之外的类变量不再是定义。它在内存块上执行操作。为什么我们不能在函数外定义类变量或非类变量,如果我们可以在函数外定义任何非类变量使其成为全局变量?为什么我们不能在函数外定义类变量或类变量,如果我们可以在函数外定义任何非类变量,使其成为全局变量,为什么我们不能在函数外定义类变量或类变量,如果我们可以在函数之外定义任何非类变量,使其成为全局变量,这是因为传统OO设计的核心原则之一是封装。类定义是自包含的。
class abc
{
    public:
    int x = 10;
};