Mar*_*aux 1 c++ constructor initialization
我在我的标题"Test.h"中有一个类的变量,它没有没有参数的构造函数.我有一个像这样的构造函数:
Test::Test() // <-- Here he complains:
// error: no matching function for call to ‘Beer::Beer()’
{
int i = 2;
theVar = Beer(1, i); // Beer(int, int) is the only constructor
}
Run Code Online (Sandbox Code Playgroud)
但我正在构造函数体中的(空)初始化列表之后初始化它.
我怎么解决这个问题?如果它有一个名字,这个问题怎么称呼?
谢谢
jal*_*alf 14
您需要使用初始化列表.
Test::Test() : theVar(1, 2) {}
Run Code Online (Sandbox Code Playgroud)
如果问题是i某些其他函数调用的结果,你可以做一些像
Test::Test() : theVar(1, compute_i()) {}
Run Code Online (Sandbox Code Playgroud)
问题是在初始化所有成员之后执行构造函数体.
首先通过调用初始化列表中指定的构造函数来初始化它们,如果该成员未在其中列出,则通过调用其默认构造函数来初始化它们.
这就是为什么你得到错误抱怨Beer::Beer():因为没有指定其他内容,它试图调用该构造函数进行初始化theVar,并且它不存在.
然后在初始化所有成员之后,执行构造函数体(执行赋值,而不是初始化)theVar.但编译器永远不会那么远,因为它无法执行初始化.