2016-04-17 7 views
1

Es ist schon einige Zeit her, seit ich das letzte Mal Code geschrieben habe, aber ich versuche, die wenigen Fähigkeiten, die ich beim Lernen gewonnen habe, zu beseitigen. Im Moment versuche ich nur Lösungen für Aussagen/Fragen zu implementieren, die ich online sehe.C++ Liste innerhalb der Klasse, um Benutzereingaben zu speichern

Dafür versuche ich eine Allergie-Klasse zu bauen, die Informationen (Kategorie, Name, Symptome) speichert, die durch Benutzereingaben zur Verfügung gestellt werden. Ich begann damit, dass ich nur einen String-Input für jeden Parameter nahm, aber in der realen Welt können Menschen mehrere Symptome haben. Dafür möchte ich einen Listenparameter für Symptome anstelle einer einzelnen Zeichenfolge erstellen. Hier sind meine Dateien:

Allergy.hpp:

#ifndef Allergy_hpp 
    #define Allergy_hpp 

    #include <iostream> 
    #include <string> 
    #include <list> 
    using namespace std; 


    class Allergy { 
    public: 

     Allergy(); 
     Allergy(string, string, list <string>); 
     ~Allergy(); 

     //getters 
     string getCategory() const; 
     string getName() const; 
     list <string> getSymptom() const; 


    private: 

     string newCategory; 
     string newName; 
     list <string> newSymptom; 
    }; 

    #endif /* Allergy_hpp */ 

Allergy.cpp:

#include "Allergy.hpp" 

Allergy::Allergy(string name, string category, list <string> symptom){ 
    newName = name; 
    newCategory = category; 
    newSymptom = symptom; 
} 

Allergy::~Allergy(){ 

} 

//getters 

string Allergy::getName() const{ 
    return newName; 
} 

string Allergy::getCategory() const{ 
    return newCategory; 
} 


list Allergy::getSymptom() const{ 
    return newSymptom; 
} 

main.cpp:

#include <iostream> 
#include <string> 
#include "Allergy.hpp" 

using namespace std; 



int main() { 
    string name; 
    string category; 
    string symptom; 

    cout << "Enter allergy name: "; 
    getline(cin, name); 
    cout << "Enter allergy category: "; 
    getline(cin, category); 
    cout << "Enter allergy symptom: "; 
    getline(cin, symptom); 

    Allergy Allergy_1(name, category, symptom); 
    cout << endl << "Allergy Name: " << Allergy_1.getName() << endl << 
    "Allergy Category: " << Allergy_1.getCategory() << endl << 
    "Allergy Symptom: " << Allergy_1.getSymptom() << endl; 

    return 0; 
} 

Ich habe es nicht auf die gemacht Implementierung in main.cpp. Fürs Erste bleibe ich beim Erstellen eines Getters für die Liste in Allergy.cpp. Jede Führung wird sehr geschätzt !!!

Antwort

1

Die Signatur der Umsetzung des Getter die Signatur nicht in der Klassendefinition entsprechen:

list Allergy::getSymptom() const{ // <=== oops!! 
    return newSymptom; 
} 

Nur soviel korrigieren:

list<string> Allergy::getSymptom() const{ // <=== yes !! 
    return newSymptom; 
} 

Edit:

Auch wenn die Getter wird jetzt kompilieren, Sie können nicht nur die Liste der Symptome wie folgt anzeigen:

cout << endl << "Allergy Name: " << Allergy_1.getName() << endl << 
    "Allergy Category: " << Allergy_1.getCategory() << endl << 
    "Allergy Symptom: " << Allergy_1.getSymptom() << endl; 

die Symptome zu drucken, entweder ein Entfernungs-für, die eine einfache Möglichkeit, durch eine Liste zu durchlaufen ist:

for (auto& s : Allergy_1.getSymptom()) { 
    cout << s<<" "; 
} 

Oder eine Kopie mit einem ostrea_iterator verwenden:

auto mylist=Allergy_1.getSymptom(); 
copy (mylist.begin(), mylist.end(), ostream_iterator<string>(cout," ")); 
+0

Vielen Dank!! Ich fing den Getter-Fehler kurz nach der Veröffentlichung - Doh. Danke für den Pro-Tipp zum Ausdruck der Liste. Kannst du die for-Schleife etwas mehr erklären? - Es funktioniert trotzig, aber ich möchte nichts verwenden, was ich nicht verstehe. – user1748681

+1

Der for-Bereich durchläuft die Elemente eines Containers (nach dem ':') mit einer Inhaltsvariablen (hier s, und ich möchte mich nicht mit dem Typ beschäftigen, also setze ich automatisch). Weitere Informationen finden Sie hier: http://en.cppreference.com/w/cpp/language/range-for – Christophe