Ошибка, я пытаюсь создать функцию, которая обрабатывает симптомы человека, а затем сохраняет ее внутри векторной строки как «Y» или «N», и я получаю это

#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...";
    }
}
  

К сожалению, это только одна из многих проблем с вашим кодом.

Кстати, если вы потратите некоторое время на выбор логических и значимых имен для своих функций и переменных, вам будет проще программировать. Забавно. Половина битвы с программированием — это четкое мышление о том, что вы делаете, а бессмысленные или произвольные имена показывают, что вы не мыслите ясно.