尝试将字符串作为类的参数传递,但它在C++中被识别为字符数组

0 c++ arrays string constructor chars

我在主函数中初始化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;
};
Run Code Online (Sandbox Code Playgroud)

这是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);
Run Code Online (Sandbox Code Playgroud)

main函数中的所有Warrior初始化都会导致类似这样的错误:

错误:没有构造函数"Warrior :: Warrior"匹配参数列表参数类型的实例是:(const char [7],int)

我在某处读到C++中的字符串实际上是字符数组,这就是为什么warrior初始化不起作用但我不知道如何更改构造函数以使程序工作.此外,我不允许更改主要功能,因为它是由教师提供的.

Lig*_*ica 5

问题不在于字符串.在const char[7]将被成功地用于建造临时std::string秒.

问题是你试图将int文字绑定到引用到非const; 你不能这样做.接受const int&你的构造函数会修复你的程序.

不过,我建议改变你的构造函数采取其int由s 价值,因为它并不需要修改原件和ints为小:

Warrior(const string& input_name, int input_strength)
//                                ^^^
   : name(input_name)
   , strength(input_strength)
{}
Run Code Online (Sandbox Code Playgroud)