类不支持运算符
Posted
技术标签:
【中文标题】类不支持运算符【英文标题】:Class doesn't support operators 【发布时间】:2009-07-10 17:46:13 【问题描述】:我从结构中创建了一个向量来存储多种类型的值。但是,我无法获得工作投入。
#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);
我还尝试将主函数中的 name 和 age 变量设为 string/int 类型,虽然这解决了运算符问题,但它会导致 push_back 行中的函数调用出现问题。
附:是否可以 push_back 多个输入,例如...
cin >> name >> age;
nameage.push_back(name,age);
?
【问题讨论】:
您遇到了哪些错误? 【参考方案1】:为什么不这样做:
People p;
cin >> p.name;
cin >> p.age;
nameage.push_back( p );
你不能只是cin >>
p,因为istream
不知道如何输入“人物”对象。因此,您可以为 People
定义 operator>>
,或者您可以将各个字段读入 People 对象。
另外,请注意,您需要 push_back
类型为 People
的对象,因为这就是您的 vector
是什么——它是一个 People
容器。
【讨论】:
这种方式有效,但现在我正在尝试输出向量。我需要为 People 定义运算符 可以,也可以单独输出成员。 一种流行的方式是根据每个成员的 operator 【参考方案2】:一种选择是为人员定义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);
【讨论】:
【参考方案3】:你的意思可能是:
People person;
while( cin >> person.name >> person.age && person.age != 0)
nameage.push_back(person);
或者更好的是,您可以重载 >> 运算符,但看起来您正在寻找更初学者的解决方案。
【讨论】:
【参考方案4】:我想你想在 main() 中将 name 声明为 string 并将 age 声明为 int。您将它们声明为 People
。除非您重载了运算符 >>,否则这不会编译。
【讨论】:
以上是关于类不支持运算符的主要内容,如果未能解决你的问题,请参考以下文章
JSX 元素类不支持属性,因为它没有“道具”property.ts(2607)