无法初始化 class 成员?

Cannot initialize a class member?

在我正在浏览的笔记中,我来到了显示该页面的页面

class Student{
public:
    Student()
    {
        age = 5; //Initialize age
    };
private:
    int age; // **Cannot initialized a class member**
    string name; // **Cannot initialized a class member**
 };

无法初始化 class 成员是什么意思?这是关于构造函数初始化列表的主题。我已经使用这段代码在 VS 中进行了测试,它工作正常。

class TestClass
{
    int number = 27; //The member is initialized without a problem.
public:
    TestClass();
    int getNumber(); // Return number
    ~TestClass();
};

如果我问了一个愚蠢的问题,我深表歉意,但我希望通过在这里发布这个问题来更好地学习。

在 C++ 11 之前,您无法初始化非静态变量。您需要使用 getter 和 setter。

class Student{
public:
    Student()
    {
        age = 5; //Initialize age
    };
private:
    int age; // **Cannot initialized a class member**
    string name = "Hello"; // Invalid 
};

第二个示例(在声明点初始化非静态 class 成员)只允许在 C++11 或更高版本中使用。

第一个在 C++11 之前有效,尽管通常认为使用初始化列表实现构造函数比在构造函数主体中分配它更好。

//  within your definition of class Student

Student() : age(5)
{
};

如果您希望您的代码与较早的(C++11 之前的)编译器一起工作,您不能在声明时初始化非静态成员。

如果您希望您的代码仅适用于 C++11(或更新的)编译器,那么这两个选项都是有效的,并且选择归结为编码风格(即它是主观的)。

如果你是印度人并且是 class 第 12 名学生,这个答案适合你...

参见代码 1 非常好,并且 运行 根据 c++ 的所有标准都很好。在代码 2 中,如果您使用的标准早于 c++11

,则只能在声明时初始化静态成员

现在,印度学校通常教授的是比 c++11(我猜是 c++03)更早的标准。但是 VS 使用最新的编译器并相应地编译代码。因此,你的代码 运行s 在 VS 上,但根据书

是错误的