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

Trying to pass a string as an argument for a class but it is being recognized as an array of chars instead in C++

我在主函数中初始化 Warrior 对象时遇到问题

我的战士 Class 的代码如下

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

这是主要功能的部分代码

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::strings。

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

但是,我建议更改您的构造函数以将其 ints 设为 value,因为它不需要修改原件和 ints小:

Warrior(const string& input_name, int input_strength)
//                                ^^^
   : name(input_name)
   , strength(input_strength)
{}

您要求在构造函数中引用非常量 int& 并提供 int 文字。该错误告诉您没有构造函数将 int 作为参数。按值传递 int 应该可以修复它。此外,C++ 中的字符串文字(引号之间的字符串)是一个以 null 结尾的 char 数组,而不是 std::string,尽管它可用于构造一个,并且在这种情况下不会导致错误。