Здравствуйте, я новичок в программировании, и я пытаюсь отобразить список классов в C ++
я попробовал это:
#include <string>
#include <list>
class Person
{
public:
std::string Name;
Person();
virtual ~Person();
}
#include "Person.h"#include <iostream>
#include <conio.h>
#include <list>
#include <string>
using namespace std;
int main()
{
Person p;
list<Person> lp;
p.Name= "Smith";
lp.push_back(p);
while (it != lp.end())
{
cout << *it;
it++;
}
_getch();
return 0;
}
но ничего не отображается, я не знаю почему! Может кто-то помочь мне, пожалуйста ? благодарю вас
На самом деле, cout << *it;
часть просто отлично.
То, что вы забыли сделать, это перегрузка operator<<
для вашего класса. Чтобы обеспечить согласованность, я бы, вероятно, изменил его, указав имя при создании Person, а затем Name
закрытый член, поэтому внешний код не может испортить его:
class Person
{
std::string Name;
public:
Person(std::string Name) : Name(Name) {}
virtual ~Person();
friend std::ostream &operator<<(std::ostream &os, Person const &p) {
return os << p.Name;
}
}
Тогда ваш код для создания и распечатки списка может выглядеть примерно так:
std::list<Person> people { "Smith", "Jones" };
for ( auto const &p : people)
std::cout << p << "\n";
Если вы хотите распечатать Person::Name
поле, которое вы должны изменить свой оператор печати
cout << *it;
в
cout << it->Name;
который напечатает поле имени в Person
пример.
В качестве альтернативы, вы можете перегрузить operator <<
для вашего класса, как описано в ответе @ JerryCoffin.