2009-07-10 12 views
1

Ich habe einen Vektor aus einer Struktur erstellt, um mehrere Arten von Werten zu speichern. Ich kann jedoch keine Eingaben für die Arbeit bekommen.Klasse unterstützt keine Operatoren

#include "std_lib_facilities.h" 

struct People{ 
     string name; 
     int age; 
}; 

int main() 
{ 
    vector<People>nameage; 
    cout << "Enter name then age until done. Press enter, 0, enter to continue.:\n"; 
    People name; 
    People age; 
    while(name != "0"){ 
       cin >> name; 
       nameage.push_back(name); 
       cin >> age; 
       nameage.push_back(age);} 
    vector<People>::iterator i = (nameage.end()-1); 
    nameage.erase(i);  
} 

Ich habe auch versucht, die Namen und das Alter, die Variablen in der Hauptfunktion String/int-Typen sein, und während das der Bediener Problem behebt, führt es zu einem Problem mit der Funktion in der push_back Linie aufrufen.

P.S. Ist es möglich, mehrere Eingänge wie z. B. ...

cin >> name >> age; 
nameage.push_back(name,age); 

?

+1

Welche Fehler bekommen Sie? – jalf

Antwort

8

Warum nicht:

People p; 
cin >> p.name; 
cin >> p.age; 
nameage.push_back(p); 

Sie können nicht nur cin >> p, wie istream nicht verstehen, wie Eingang zu einem „Menschen“ Objekts. Sie können entweder operator>> für People definieren, oder Sie können einfach die einzelnen Felder in ein People-Objekt einlesen.

Beachten Sie auch, müssen Sie push_back ein Objekt vom Typ People, wie das ist, was Ihr vector ist - es ist ein People Behälter.

+0

Dieser Weg hat funktioniert, aber jetzt versuche ich den Vektor auszugeben. Muss ich den Operator << für People definieren? – Alex

+0

Sie könnten, oder Sie könnten die Mitglieder separat ausgeben. – luke

+0

Ein beliebter Weg besteht darin, den Operator <<() in Bezug auf den Operator <<() jedes Mitglieds separat zu definieren, mit einer Art, die Felder zu unterscheiden. –

3

Eine Option ist ein operator>> für Menschen zu definieren.

struct People 
{ 
    friend std::istream & operator>> (std::istream & in, People & person); 
}; 

std::istream & operator>> (std::istream & in, People & person) 
{ 
    in >> person.name >> person.age; 
    return in; 
} 

Dann könnten Sie schreiben:

Person p; 
cout << "Enter the person's name and age, separated by a space: "; 
cin >> p; 
nameage.push_back (p); 
1

Sie wahrscheinlich bedeuten:

People person; 
while(cin >> person.name >> person.age && person.age != 0){ 
    nameage.push_back(person); 
} 

Oder noch besser können Sie den Operator >> überlasten, aber es sieht aus wie Sie für eine gesuchte mehr Anfängerlösung.

0

Ich glaube, Sie wollten den Namen als String deklarieren und als ein int im main() altern. Sie deklarieren sie als People. Dies wird nicht kompiliert, wenn Sie den Operator >> nicht überlastet haben.

Verwandte Themen