2009-07-10 103 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。除非重载操作符>>,否则不会编译。

相关问题