Как распечатать LinkedList объектов

Я пытаюсь распечатать связанный список объектов статистики. У меня есть класс статистики с конструктором, который содержит имя, уровень и опыт. Но у меня не получается распечатать. Вот как я пытаюсь это сделать:

void Print(DoublyLinkedList<Datatype> p_list)
    {
        int index = -1;
        //Set up a new Iterator.
        //DoublyLinkedListIterator<Datatype> itr = getIterator();
        for(itr.Start(); itr.Valid(); itr.Forth())
        {
                index++;
                cout <<"Index: "<< index << "\tElement: " << itr.Item() << "\n";
        }
        cout <<"Number of Elements in the List: " << m_count << endl;
    }

Это вызывает ошибку при вызове itr.item(). Ошибка:

Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Stats' (or there is no acceptable conversion)

Это из класса doubleLinkedlist, я настроил связный список в main() и пытаюсь выполнить list.print(list) из main().

Отредактировано в Stats.cpp

#include "Stats.h"
#include <string>
#include <iostream>

Validators validators2;

Stats::Stats()
{
    firstName = "";
    secondName = "";
    level = 0;
    experience = 0;
}
Stats::Stats(string firstName,string secondName, int level, int experience)
{
    firstName = firstName;
    secondName = secondName;
    level = level;
    experience = experience;

}
    string Stats :: getFirstName()
    {
        return firstName;
    }
    string Stats :: getSecondName()
    {
        return secondName;
    }
    int Stats :: getLevel()
    {
        return level;
    }
    int Stats :: getExperience()
    {
        return experience;
    }
    Stats Stats :: input()
    {
        firstName = "Please enter the First Name: ";
        string inputfirstName = validators2.getString(firstName);
        secondName = "Please enter the Second Name: ";
        string inputSecondName = validators2.getString(secondName);
        cout<< "Please enter the level: ";
        int inputLevel = validators2.getNum();
        cout<< "Please enter the experience: ";
        int inputExperience = validators2.getNum();

        Stats s1(inputfirstName,inputSecondName,inputLevel,inputExperience);
        return s1;

    }

Заранее спасибо... Бекка.


person Becca    schedule 16.04.2013    source источник
comment
Если вы покажете нам класс Stats (и то, что вы хотели бы из него распечатать), вам будет немного легче помочь.   -  person Victor Sand    schedule 17.04.2013
comment
Я только что отредактировал в классе статистики :)   -  person Becca    schedule 17.04.2013


Ответы (4)


как говорится: у вас нет оператора‹‹, определенного для вашей статистики класса. Вы должны определить это:

 std::ostream& operator<<(std::ostream& os, const Stats& s){
    //define what it means to cout<<Stats, for example:
    //print some attributes
    os<<"\nfirstName: "<<s.getFirstName();
    os<<"\nsecondName: "<<s.getSecondName();
    os<<"\nlevel: "<<s.getLevel();
    //and so on

    return os; // so chunk is possible os<<a<<b<<c
  }
person 4pie0    schedule 16.04.2013
comment
Я просто помещаю это в функцию? Должен ли я передать его куда-нибудь? И кстати спасибо :) - person Becca; 17.04.2013
comment
это может быть определено снаружи, если не потребуется доступ к закрытым членам вашего класса Stat - person 4pie0; 17.04.2013
comment
Я попытался поместить его в свой класс DLL, и я только что получил кучу ошибок: Ошибка 1, ошибка C4430: отсутствует спецификатор типа - предполагается int. Ошибка 3 ошибка C2804: бинарный 'оператор ‹‹' имеет слишком много параметров DoublyLinkedList Ошибка 2 ошибка C2143: синтаксическая ошибка: отсутствует ',' перед '&' - person Becca; 17.04.2013
comment
ты поставил точку с запятой? ОС‹‹s.std_dev(); - person 4pie0; 17.04.2013
comment
нет, я буквально просто скопировал и вставил его как функцию в свой класс DoublyLinkedList... - person Becca; 17.04.2013
comment
Я предположил, что у вас есть функция mean() и std_dev(). в вашем классе есть эти функции? - person 4pie0; 17.04.2013
comment
Извините, нет, я, хотя часть iostream. - person Becca; 17.04.2013
comment
Почти там, лол, у меня 2 ошибки: Ошибка 1, ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает ошибку default-int Error 2 C2143: синтаксическая ошибка: отсутствует ',' перед '&' - person Becca; 17.04.2013
comment
пожалуйста, обновите свой код и покажите, где ошибки и, самое главное, как вы используете оператор ‹‹ - person 4pie0; 17.04.2013
comment
Исправил это, переместив в другой файл :) Функция печати выглядит так, как будто в ней есть ошибки, но это еще одна работа, ха-ха, большое спасибо :) - person Becca; 17.04.2013

В ошибке точно указано, что не так: оператор ‹‹ не знает, как обращаться с объектом того типа, который вы пытаетесь распечатать. Если вы хотите использовать такой код, вам нужно перегрузить оператор для класса Stats.

person Victor Sand    schedule 16.04.2013
comment
Ну, не строго в классе. - person Beta; 17.04.2013

В соответствии с полученным сообщением вам просто нужно объявить оператор ‹‹ для типа статистики.

person Roman Nikitchenko    schedule 16.04.2013

Вам необходимо предоставить

std::ostream & operator<<(std::ostream &os, const Stats& s)

Это должен быть бесплатный фантон, а не член статистики

person alexrider    schedule 16.04.2013