Класс не поддерживает операторы - PullRequest
1 голос
/ 10 июля 2009

Я создал вектор из структуры для хранения нескольких типов значений. Тем не менее, я не могу получить ввод для работы.

#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.

P.S. Можно ли push_back несколько входов, таких как ...

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

?

Ответы [ 4 ]

8 голосов
/ 10 июля 2009

Почему бы не сделать:

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

Вы не можете просто cin >> p, так как istream не понимает, как вводить объект "Люди". Таким образом, вы можете определить operator>> для People или просто прочитать в отдельных полях объект People.

Кроме того, обратите внимание, вам нужно push_back объект типа People, поскольку это то, чем является ваш vector - это контейнер People.

3 голосов
/ 10 июля 2009

Одним из вариантов является определение 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 голос
/ 10 июля 2009

Вы, вероятно, имеете в виду:

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

Или, что еще лучше, вы можете перегрузить оператор >>, но похоже, что вы ищете более новое решение.

0 голосов
/ 10 июля 2009

Я думаю, что вы хотели объявить name как строку, а age как int в main (). Вы объявляете их как People. Это не скомпилируется, если вы не перегрузили оператор >>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...