Error: no default constructor exists for class

Error: no default constructor exists for class

我有一个从基础 class 派生的 class,并为每个 class 设置了构造函数,但我不断收到错误提示,我没有基础 [=] 的任何构造函数16=].

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' 不存在默认构造函数”。但我想我已经为 class Dog 创建了一个构造函数。你能解释一下为什么这段代码是错误的吗?

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

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

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

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

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

 public:
    Dog() = default;

两种方式: 1)有一个没有参数的默认构造函数。 2) 从 Huey 调用你在 Dog 中的现有构造函数(这在你的情况下是正确的,因为 Huey 毕竟是一只 Dog)。 Huey 目前正在调用 Dog 的默认构造函数,因为它没有定义和显式调用。