问题描述
string yesno(string holder,vector<string> symptom)
{
if(holder == "Y" || holder == "y"){
return symptom.push_back("Y");
}
else if(holder == "N" || holder == "n"){
return symptom.push_back("N");
}
else{
cout <<"Wrong input" << endl;
return symptom.push_back("-");
}
}
这是我的功能,当我问用户是否遇到某种症状,然后要求Y / y或N / n作为答案时。
函数中的if
块检测到Y或N的大小写,然后我将symptom.push_back()
返回为“ Y”或“ N”,但出现此错误:
错误:无法转换 'symptom.std :: vectorstd :: __ cxx11 :: basic_string
解决方法
std::vector.push_back()
函数的返回类型为void
,所以没有办法,您可以将其返回的值转换为任何类型(因为它什么也不会返回)。
但是,有std::vector.back()
函数,该函数返回对最后一个元素的引用;因此,您可以在相关的代码块中进行条件push_back()
调用,然后有一个单返回语句,以“取回”被推入的元素:
string yesno(string holder,vector<string> symptom)
{
if (holder == "Y" || holder == "y") {
symptom.push_back("Y");
}
else if (holder == "N" || holder == "n") {
symptom.push_back("N");
}
else {
cout << "Wrong input" << endl;
symptom.push_back("-");
}
return symptom.back();
}
此外,如注释中所述,您正在按值传递symptom
向量 ,这意味着将使用本地副本,并且对它的任何更改将在丢失时丢失。函数返回(副本将被删除)。您可能需要考虑通过引用传递symptom
:
string yesno(string holder,vector<string>& symptom) // Pass by reference!
{
//...