2009-07-10 94 views
1

我從結構中創建了一個向量來存儲多種類型的值。但是,我無法獲得投入。類不支持運算符

#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);  
} 

我也試過在其主函數的名字和年齡變量是字符串/ int型,雖然能解決操作問題,它導致了一個問題,在該行的push_back函數調用。

P.S.是否有可能push_back多個輸入,如...

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

+1

你會得到哪些錯誤? – jalf 2009-07-10 17:49:05

回答

8

爲什麼不這樣做:

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

你不能只是cin >> P,爲istream不知道如何輸入「人民」的對象。因此,您可以爲People定義operator>>,或者您可以將各個字段讀入People對象。

另外,請注意,您需要push_backPeople類型的對象,因爲這就是您的vector是 - 它是一個People容器。

+0

這種方式工作,但現在我試圖輸出矢量。我是否需要定義operator << for People? – Alex 2009-07-10 17:59:55

3

一個選項是爲People定義operator>>

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; 
} 

然後,你可以寫:

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

你大概的意思是:

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

或者更好的是你可以重載>>運算符,但它看起來像你正在尋找一個更多初學者解決方案。

0

我想你想在main()中聲明一個字符串和年齡爲int的名字。你宣佈他們爲People。除非重載操作符>>,否則不會編譯。

相關問題