在类内创建类的实例时,应在哪里放置构造函数参数?

时间:2018-10-24 14:49:18

标签: c++ class

我正在尝试让我的Class2有一个Class1的实例,但我不知道将构造函数参数放在哪里。我有以下代码:

class Class1 {
public:    Class1(std::string name) { myName = name; }
private:   std::string myName;
};

class Class2  {
private:
    Class1 player("Steve"); 
};

产生错误:

prog.cpp:12:20: error: expected identifier before string constant

 Class1 player("Steve");

               ^~~~~~~
prog.cpp:12:20: error: expected ‘,’ or ‘...’ before string constant

Live example

我如何正确构建我的课程?

1 个答案:

答案 0 :(得分:4)

Class1 playerClass2的成员变量。 Class1没有默认构造函数,因为您声明了一个采用string的构造函数。因此,您唯一的选择是Class2的构造函数的初始化列表:

class Class2 {
    public: Class2() : player("Steve") {} // Initializer list 
    private: Class1 player;
};

或者如果您使用默认成员初始化程序的c ++ 11:

class Class2 { 
    private: Class1 player{"Steve"};
};

两者的信息都可以找到here。可以在here中找到一个实时示例。