我在主函数中初始化 Warrior 对象时遇到问题
下面是我的 Warrior 类的代码
class Warrior{
public:
Warrior(const string& input_name, int& input_strength) :name(input_name), strength(input_strength) {};
string getname()const{
return name;
};
int getstrength(){
return strength;
};
void change_strength(int damg_taken){
strength -= damg_taken;
};
private:
string name;
int strength;
};
这是main函数的部分代码
Warrior cheetah("Tarzan", 10);
Warrior wizard("Merlin", 15);
Warrior theGovernator("Conan", 12);
Warrior nimoy("Spock", 15);
Warrior lawless("Xena", 20);
Warrior mrGreen("Hulk", 8);
Warrior dylan("Hercules", 3);
主函数中的所有 Warrior 初始化都会导致类似这样的错误:
错误:构造函数“Warrior::Warrior”的实例不匹配参数列表参数类型是:(const char[7],int)
我在某处读到 C++ 中的字符串实际上是字符数组,这就是 warrior 初始化不起作用的原因,但我不知道如何更改构造函数以使程序运行。也不允许我更改主要功能,因为它是由讲师提供的。
最佳答案
问题不在于字符串。 const char[7]
将成功用于构造临时 std::string
。
问题是您正在尝试将 int
文字绑定(bind)到对非 const
的引用;你不能这样做。将 const int&
接受到您的构造函数中将修复您的程序。
但是,我建议更改您的构造函数,使其 int
为 value,因为它不需要修改原始值和 int
s 很小:
Warrior(const string& input_name, int input_strength)
// ^^^
: name(input_name)
, strength(input_strength)
{}
关于c++ - 尝试将字符串作为类的参数传递,但在 C++ 中它被识别为字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790078/