首页 > 解决方案 > 什么时候需要默认构造函数?

问题描述

class Test
{
private :
    int i;
public:
    Test(int m)
    {
      i = m;
    }
    void restart(int k)
    {
        Test(k);
    }
};

但是,编译器 (VS17) 向我发送了一条错误消息,说“Test 类不存在默认构造函数”,但我认为我不需要默认构造函数,因为此类中的所有函数都需要一个 int 类型参数。

标签: c++classoopconstructordefault

解决方案


class Test {
// ...
    void restart(int k)
    {
        Test(k);
    }
};

该语句声明了一个名为Test(k);的变量。通过调用不存在的默认构造函数来初始化此变量。Testkk

我认为我不需要默认构造函数,因为此类中的所有函数都需要 int 类型参数。

这既不是支持也不是反对class拥有/需要默认构造函数的理由。

如果您想要设置Test::iinside的值,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; }
};

推荐阅读