Не можете передать строковый аргумент в конструктор?
Когда я пытаюсь запустить мою программу, она печатает
"ошибка: нет подходящей функции для вызова
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();
};