C++ 试图将字符串作为类的参数传递,但在C++;
我在初始化主函数中的Warrior对象时遇到问题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 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