错误:该类不存在默认构造函数

时间:2019-01-21 02:56:31

标签: c++ constructor derived-class

我有一个从基类派生的类,并为每个类设置了构造函数,但我不断收到错误消息,说我没有基类的构造函数。

class Dog
    {
    protected:
    string name;
    int age;

    public:

    Dog(string dogsName, int dogsAge)
    {
        name = dogsName;
        age = dogsAge;
    }

    virtual void Bark()
    {
        cout << "Woof Woof I am a dog" << endl;
    }


class Huey: public Dog
{
public:

    Huey()
    {
        name = "goodboy";
        age = 13;
    }

     void Bark()
    {
    cout << "woof" << endl;
    }
}

在这里,我在Huey()上收到一个错误,它说“'Dog'没有默认的构造函数”。但是我想我已经为Dog类创建了一个构造函数。你能解释一下为什么这个代码是错误的吗?

3 个答案:

答案 0 :(得分:0)

当您指定自己的任何构造函数时,将不再创建默认构造函数。但是,您可以将其重新添加。

class Dog
    {
    protected:
    string name;
    int age;

    public:

    Dog() = default;

    Dog(string dogsName, int dogsAge)
    {
        name = dogsName;
        age = dogsAge;
    }

    virtual void Bark()
    {
        cout << "Woof Woof I am a dog" << endl;
    }
};

class Huey: public Dog
{
public:

    Huey()
    {
        name = "goodboy";
        age = 13;
    }

     void Bark()
    {
    cout << "woof" << endl;
    }
};

编辑:似乎您想从Dog调用自定义Huey构造函数。就是这样

class Dog
    {
    protected:
    string name;
    int age;

    public:

    Dog(string dogsName, int dogsAge)
    {
        name = dogsName;
        age = dogsAge;
    }

    virtual void Bark()
    {
        cout << "Woof Woof I am a dog" << endl;
    }
};

class Huey: public Dog
{
public:

    Huey() : Dog("goodboy", 13) {}

    void Bark()
    {
    cout << "woof" << endl;
    }
};

答案 1 :(得分:0)

您需要创建一个没有参数且没有实现的构造函数。如下:

 public:
    Dog() = default;

答案 2 :(得分:0)

两种方法: 1)具有没有参数的默认构造函数。 2)从Huey调用Dog中现有的构造函数(这对您来说是正确的,因为Huey毕竟是Dog)。 Huey当前正在调用Dog的默认构造函数,因为尚未定义和显式调用它。