![](/img/trans.png)
[英]proper use of std::vector.push_back() with a user defined type
[英]What function data type should I use to return a vector.push_back()?
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<char ::push_back(std::__cxx11::basic_string(((const char*)"Y"), std::allocator()) )' 從 'void' 到 'std::__cxx11::string' {aka 'std::__cxx11::basic_string'}|
該std::vector.push_back()
函數有一個void
返回類型,所以也沒有辦法,你能將它返回到任何類型的(因為它不返回任何東西)。
但是,有std::vector.back()
函數,它返回對最后一個元素的引用; 因此,您可以在相關塊中進行有條件的push_back()
調用,然后使用單個return 語句“檢索”被推送的元素:
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();
}
此外,如評論中所述,您通過 value傳遞symptom
向量,這意味着將使用本地副本,並且在函數返回時對其所做的任何更改都將丟失(副本將被刪除)。 您可能需要考慮通過引用傳遞symptom
:
string yesno(string holder, vector<string>& symptom) // Pass by reference!
{
//...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.