【问题标题】:Class doesn't support operators类不支持运算符
【发布时间】:2023-03-26 13:50:02
【问题描述】:

我从结构中创建了一个向量来存储多种类型的值。但是,我无法获得工作投入。

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

【问题讨论】:

  • 您遇到了哪些错误?

标签: c++ class operators


【解决方案1】:

为什么不这样做:

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

你不能只是cin &gt;&gt; p,因为istream 不知道如何输入“人物”对象。因此,您可以为 People 定义 operator&gt;&gt;,或者您可以将各个字段读入 People 对象。

另外,请注意,您需要 push_back 类型为 People 的对象,因为这就是您的 vector 是什么——它是一个 People 容器。

【讨论】:

  • 这种方式有效,但现在我正在尝试输出向量。我需要为 People 定义运算符
  • 可以,也可以单独输出成员。
  • 一种流行的方式是根据每个成员的 operator
【解决方案2】:

一种选择是为人员定义operator&gt;&gt;

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 。除非您重载了运算符 >>,否则这不会编译。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多