无法初始化一个班级成员?

时间:2016-04-11 17:23:18

标签: c++ class constructor visual-studio-2015 initializer-list

在我的笔记中,我正在浏览这个显示

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

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

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

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

3 个答案:

答案 0 :(得分:2)

第二个例子(在声明点初始化非静态类成员)仅在C ++ 11或更高版本中被允许。

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

set to :<?php echo $name; ?>

如果您打算使用较旧的(C ++ 11之前的版本)编译器,则无法在声明时初始化非静态成员。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果您是印度裔和12年级学生,这个答案适合您......

请参阅代码1完全正常,并且将根据c ++的所有标准运行良好。在代码2中,如果使用的是比c ++ 11更早的标准

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

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

是错误的