#c #vector
#c #вектор
Вопрос:
#include <iostream>
#include <vector>
using namespace std;
string disease(vector<string> symptom, vector<string> name, int patientnum){
string holder;
cout << "is " << name[patientnum] << " experiencing " << symptom[patientnum] << " Y/N";
cin >> holder;
if(holder == "Y" || holder == "y"){
return symptom.push_back("Y");
}
else if(holder == "N" || holder == "n"){
return symptom.push_back("N");
}
else{
cout <<"Please input Y/N" << endl;
cout <<"Program exiting...";
}
}
int main()
{
vector<string> dry, sneeze, namex;
int patientn = 0;
string input;
while(patientn < 2){
cout << "Name: ";
cin >> input;
namex.push_back(input);
disease(dry[patientn], namex[patientn], patientn);
patientn ;
}
for(patientn=0; patientn<namex.size(); patientn ){
cout << namex[patientn] << " is experiencing dry cough = " << dry[patientn] << endl;
cout << namex[patientn] << " is experiencing sneezing = " << sneeze[patientn] << endl;
}
return 0;
}
Это ошибка, которую я получаю
error: could not convert ‘symptom.std::vector<_Tp, _Alloc>::push_back, std::allocator > >(std::basic_string(((const char*)"Y"), std::allocator()))’ from ‘void’ to ‘std::string {aka std::basic_string}’
Я новичок в ИТ, поэтому прошу прощения, если моя логика создания этой программы глупа, а мои имена переменных сбивают с толку.
Итак, в цикле while я запрашиваю имя, а затем сохраняю его внутри вектора имен, а затем вызываю функцию, чтобы запросить ввод. «
cout <<"Is " << name << " experiecing " << symptom; //something like this but i also use an int patientnum to get the name[patientnum]
а затем получает y / n в качестве ответа.
Затем я создаю if, который принимает ответ в верхнем или нижнем регистре и возвращает symptom.push_back «Y» или «N»
и цикл for внизу должен напечатать имя, а затем Y / N
Или вы, ребята, можете предложить мне лучший способ сделать это, я готов чему-нибудь научиться.
Комментарии:
1. Несвязанный:
string disease(vector<string> symptom, vector<string> name, int patientnum)
передается по значению. такsymptom
иname
являются копиями. Это означаетsymptom.push_back("Y");
, что изменяет копию, а не оригинал, и внесенные изменения не будут видны в main.2.
push_back
ничего не возвращает, поэтому вы не можетеreturn symptom.push_back("Y");
. Не уверен, что вы пытаетесь туда вернуть, поэтому я не могу дать никаких предложений о том, как это исправить. В любом случае, это причина сообщения об ошибке, о котором вы спрашиваете.
Ответ №1:
Измените функцию на void, поскольку вы не хотите ничего из нее возвращать.
void disease(vector<string> symptom, vector<string> name, int patientnum){
string holder;
cout << "is " << name[patientnum] << " experiencing " << symptom[patientnum] << " Y/N";
cin >> holder;
if(holder == "Y" || holder == "y"){
symptom.push_back("Y");
}
else if(holder == "N" || holder == "n"){
symptom.push_back("N");
}
else{
cout <<"Please input Y/N" << endl;
cout <<"Program exiting...";
}
}
К сожалению, это только одна из многих проблем с вашим кодом.
Кстати, если вы потратите некоторое время на выбор логических и значимых имен для своих функций и переменных, вам будет проще программировать. Забавно. Половина битвы с программированием — это четкое мышление о том, что вы делаете, а бессмысленные или произвольные имена показывают, что вы не мыслите ясно.