为什么我们不能在C ++中初始化类的成员变量

时间:2018-09-01 04:29:13

标签: c++ member-initialization

出现错误:

#include <iostream>
using std::cout;

class stud
{
    int a = 0; // error??

public:
    void display();
};

int main()
{
    // ...
}

3 个答案:

答案 0 :(得分:0)

(原因)

从C ++ 11开始,支持带有默认成员初始化程序的非静态数据成员。

-

(修复程序)

如今,许多编译器都支持C ++ 11。

对于Visual Studio IDE用户(例如我自己):在项目属性上:C / C ++>语言> C ++语言标准:设置为C ++ 11或更高版本。在基线上,Visual Studio 2017支持C ++ 11。

对于除Visual Studio IDE用户以外的用户,请搜索主题:“如何启用C ++ 11”用于编译器。

答案 1 :(得分:0)

可以从C ++ 11 onwards中做到这一点。

  

通过默认成员初始化程序,该成员初始化程序只是成员声明中包含的大括号或等于初始值设定项,如果在成员初始化程序列表中省略了该成员,则使用该初始值设定项。

class S
{
    int n = 7;
    std::string s{'a', 'b', 'c'};
    S() // copy-initializes n, list-initializes s
    { }
};

答案 2 :(得分:-3)

在类中,我们通常在私有部分声明所有变量。而且我们不在类中初始化它们。 您可以使用构造函数对其进行初始化。

class stud {

private:

    int a;

public:

    stud();
};

stud::stud() 
{

int a = 5; // initialize here..

}