C++ 试图将字符串作为类的参数传递,但在C++;

C++ 试图将字符串作为类的参数传递,但在C++;,c++,arrays,string,constructor,chars,C++,Arrays,String,Constructor,Chars,我在初始化主函数中的Warrior对象时遇到问题 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 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);
下面是我的战士类的代码

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++中的字符串实际上是字符数组,这就是为什么战士初始化不起作用,但我不知道如何改变构造函数来使程序工作。此外,我不允许更改主功能,因为它是由讲师提供的。

问题不在于字符串。
const char[7]
将成功用于构造临时
std::string
s

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

但是,我建议将构造函数更改为按值获取其
int
s,因为它不需要修改原始值,而且
int
s很小:

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

问题不在于字符串。
const char[7]
将成功用于构造临时
std::string
s

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

但是,我建议将构造函数更改为按值获取其
int
s,因为它不需要修改原始值,而且
int
s很小:

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


您要求在构造函数中引用非常量
int&
,并提供
int
文本。错误告诉您没有构造函数将
int
作为参数。通过值传递int应该可以修复它。此外,C++中的字符串文字(字符串之间的引号)是一个空终止的char数组,而不是<代码> STD::String ,尽管它可以用来构造一个,并且在这种情况下不会造成错误。p> 您要求在构造函数中引用非常量
int&
,并提供
int
文本。错误告诉您没有构造函数将
int
作为参数。通过值传递int应该可以修复它。此外,C++中的字符串文字(字符串之间的引号)是一个空终止的char数组,而不是<代码> STD::String ,尽管它可以用来构造一个,并且在这种情况下不会造成错误。p> 为什么是
int&
?你甚至没有改变它。我不认为字符串是你的问题;需要引用的是
int&
,但您传递的是一个无法引用的文本值。事实上,这与字符串无关,如果您构建了一个。我已经回答了,因为你是新来的,但下次请确保你的程序是最小的:在它们完成之前,你还没有完成自己的调试,不应该发布问题。谢谢接受对
字符串
的常量引用而不仅仅是
字符串
通常是一个好主意,因为调用函数时传递的数据要少得多,因此可以获得一些性能(特别是对于大字符串)。但是在
int
的情况下,您不需要引用,因为指针的大小与
int
大致相同,因此您在那里没有获得任何性能。当然,正如其他人所说,你这样做也是错误的。正如@Lightness问题中所述,他正在失去性能,因为现在你要去引用指针。为什么是
int&
?你甚至没有改变它。我不认为字符串是你的问题;需要引用的是
int&
,但您传递的是一个无法引用的文本值。事实上,这与字符串无关,如果您构建了一个。我已经回答了,因为你是新来的,但下次请确保你的程序是最小的:在它们完成之前,你还没有完成自己的调试,不应该发布问题。谢谢接受对
字符串
的常量引用而不仅仅是
字符串
通常是一个好主意,因为调用函数时传递的数据要少得多,因此可以获得一些性能(特别是对于大字符串)。但是在
int
的情况下,您不需要引用,因为指针的大小与
int
大致相同,因此您在那里没有获得任何性能。当然,正如其他人所说,你这样做也是错误的。正如@Lightness问题中所述,他正在失去性能,因为现在你要去引用指针。
std::string
可以从字符串文本构造
int&
s也可以从
int
s构建(只要它们具有正确的值类别)。当函数需要
int&
时,必须提供
int
。恐怕这是完全错误的。我不是有意的。我说字符串不能被构造。我只是想向OP澄清字符串文字是什么。作为程序中的错误。正如你所说的,你不能把一个int文本传递给一个no-const int&。这就是OP出错的原因。没错,但你的答案不是这样说的。它仍然不对。该错误与试图“修改文字”无关。没有人试图这么做。请注意,如果构造函数采用
int&
,那么它可以正常工作,我们可以修改它。现在呢?感谢您的反馈。
s