Когда мне нужен конструктор по умолчанию? - PullRequest
0 голосов
/ 26 сентября 2018
class Test
{
private :
    int i;
public:
    Test(int m)
    {
      i = m;
    }
    void restart(int k)
    {
        Test(k);
    }
};

Однако компилятор (VS17) отправляет мне сообщение об ошибке, в котором говорится, что «для класса Test не существует конструктора по умолчанию», но я не думаю, что мне нужен конструктор по умолчанию, так как все функции в этом классе нуждаются в типе intаргумент.

1 Ответ

0 голосов
/ 26 сентября 2018

В

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; }
};
...