无法将字符串参数传递到构造函数中?

Can't pass a string argument into a constructor?

本文关键字:构造函数 参数传递 字符串      更新时间:2023-10-16

当我尝试运行我的程序时,它会打印出来

"错误:调用Dog::Dog(const char [4], const char [5])没有匹配函数"。

这发生在第 60 行和第 61 行。它是否将参数读取为 C 字符串?我应该仍然能够将其传递给构造函数,不是吗?

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

任何帮助将不胜感激!

Pet构造函数需要 2 个字符串,而不是 Dog 个。

你可以使用 Base 构造函数,这要归功于使用(自 C++11 起(:

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

演示