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

标签 c++ arrays string constructor chars

我在主函数中初始化 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& 接受到您的构造函数中将修复您的程序。

但是,我建议更改您的构造函数,使其 intvalue,因为它不需要修改原始值和 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/

相关文章:

c# - 在 B4A 中获取两个字符串之间的精确字符串

C++ 矩阵到动态二维数组(带字符串)

c++ - 在 Mac mountain lion 上运行开放式 CV 人脸检测的问题

c++ - 为什么在 MFC 中收到错误消息而不是定时器消息?

c - 数组名称为指针,数组名称带有 & 运算符

arrays - 如何使用 Powershell 简化多维数组?

Java 写入文件。使用循环

c++ - 为什么析构函数只被调用一次?

python - 两个并发的 Python 进程可以在 Boost Python 中运行吗?

arrays - 使用 Qt Designer 创建小部件数组?