Не можете передать строковый аргумент в конструктор?

Когда я пытаюсь запустить мою программу, она печатает

"ошибка: нет подходящей функции для вызова Dog::Dog(const char [4], const char [5])".

Это происходит в строках 60 и 61. Это читает аргументы как C-String? Я все еще должен быть в состоянии передать это в конструктор, не так ли?

#include <iostream>
#include <string>

using namespace std;

#include <string>
class Pet
{
protected:
    string type;
    string name;
public:
    Pet(const string& arg1, const string& arg2);
    virtual void whoAmI() const;
    virtual string speak() const = 0;
};

Pet::Pet(const string& arg1, const string& arg2): type(arg1), name(arg2)


{}
void Pet::whoAmI() const
{
    cout << "I am an excellent " << type << " and you may refer to me as " << name << endl;
}

class Dog : public Pet
{
public:
    void whoAmI() const;  // override the describe() function
    string speak();

};

string Dog::speak()
{
    return "Arf!";
}

class Cat : public Pet
{
   string speak();
    // Do not override the whoAmI() function
};

string Cat::speak()
{
    return "Meow!";
}

ostream& operator<<(ostream& out, const Pet& p)
{
    p.whoAmI();
    out << "I say " << p.speak();
    return out;
}

int main()
{
    Dog spot("dog","Spot");
    Cat socks("cat","Socks");
    Pet* ptr = &spot;
    cout << *ptr << endl;
    ptr = &socks;
    cout << *ptr << endl;
}

Любая помощь очень ценится!

1 ответ

Pet имеет конструктор, принимающий 2 строки, а не Dog,

Вы можете использовать конструктор Base благодаря использованию (начиная с C++11):

class Dog : public Pet
{
public:
    using Pet::Pet;

    void whoAmI() const;  // override the describe() function
    string speak();
};

демонстрация

Другие вопросы по тегам