2015-06-29 4 views
-4

Я проходил через список STL, и я попытался реализовать список как класс типа вместо int или любой другой тип данных. Ниже приведен код, который я пытался скомпилироватьC++: Распечатка списка STL

#include <iostream> 
#include <list> 

using namespace std; 

class AAA { 
public: 
    int x; 
    float y; 
    AAA(); 
}; 

AAA::AAA() { 
    x = 0; 
    y = 0; 
} 

int main() { 
    list<AAA> L; 
    list<AAA>::iterator it; 
    AAA obj; 

    obj.x=2; 
    obj.y=3.4; 
    L.push_back(obj); 

    for (it = L.begin(); it != L.end(); ++it) { 
     cout << ' ' << *it; 
    } 
    cout << endl; 
} 

Но он дает ошибку в строке:

cout<<' '<<*it; 

и ошибка

In function 'int main()': 
34:13: error: cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&' 
In file included from /usr/include/c++/4.9/iostream:39:0, 
      from 1: 
/usr/include/c++/4.9/ostream:602:5: note: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = AAA]' 
operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x) 
^ 

На самом деле я хочу, чтобы напечатать содержимое список, используя код выше. Может кто-нибудь помочь мне в решении этого?

+0

Для печати использовать cout <<"x: "< x <<" y: "< y; –

+0

Я уже пробовал (* это) .x, и это было полезно, однако есть ли другой способ распечатать список через цикл, я имею в виду, что я хочу избежать печати каждого отдельного элемента. – NixiN

+0

Это не имеет никакого отношения к ' list', попробуйте упростить код, и вы получите ту же ошибку из 'AAA obj; std :: cout << obj; ' –

ответ

4

Вы пытаетесь вывести объект типа AAA на номер std::ostream. Для этого вам необходимо написать перегрузку для operator<<. Что-то вроде этого:

std::ostream& operator<< (std::ostream& stream, const AAA& lhs) 
{ 
    stream << lhs.x << ',' << lhs.y; 
    return stream; 
} 
+0

ваше предложение было полезным. Теперь я могу получить желаемый результат. Было бы здорово, если вы объясните мне, как это работает. Я имею в виду, как он называется, вызывается и откуда, потому что я новичок в перегрузке оператора. – NixiN

+0

@NixiN исчерпывающее объяснение перегрузки оператора для этого немного выходит за рамки. Я бы предложил посмотреть [этот вопрос] (http://stackoverflow.com/questions/4421706/operator-overloading). – TartanLlama

Смежные вопросы