class Test
{
private :
int i;
public:
Test(int m)
{
i = m;
}
void restart(int k)
{
Test(k);
}
};
但是,编译器(VS17)向我发送一条错误消息,指出“类Test不存在默认构造函数”,但我认为我不需要默认构造函数,因为此类中的所有函数都需要一个int类型参数。 / p>
答案 0 :(得分:6)
在
class Test {
// ...
void restart(int k)
{
Test(k);
}
};
语句Test(k);
声明了名为Test
的类型k
的变量。通过调用不存在的默认构造函数来初始化此变量k
。
我认为我不需要默认的构造函数,因为此类中的所有函数都需要一个int类型的参数。
这既不是class
是否具有/不需要默认构造函数的原因。
如果要在Test::i
内设置Test::reset()
的值,则只需这样做:
class Test
{
private:
int i;
public:
Test(int m) : i{ m } // you should use initializer lists instead of
{} // assignments in the constructors body.
void restart(int k) { i = k; }
};