Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора вывода - C++

Восстановить пароль Регистрация
 
S_M_L
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3
19.12.2012, 01:13     Перегрузка оператора вывода #1
Здравствуйте!
Подскажите пожалуйста как можно решить проблему с перегрузкой оператора.
В моем коде выдает ошибку: error C2440: '=' : cannot convert from 'List::ListItem *' to 'ListItem *'

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
using namespace std;
struct ListItem{
        int x;
        int y;
        ListItem* next;
        ListItem(int x, int y, ListItem* next=NULL)
        {
            this->x=x;
            this->y=y;
            this->next=next;
        }
    };
class List{
public:
    friend struct ListItem;
    struct ListItem{
        int x;
        int y;
        ListItem* next;
        ListItem(int x, int y, ListItem* next=NULL)
        {
            this->x=x;
            this->y=y;
            this->next=next;
        }
    };
    List();
    ~List();
    void AddItem(int,int);
    void Add(const List&);
    List & operator=(const List &);
    friend List operator+(const List&,const List&);
    friend ostream operator<<(ostream&,List&);
private:
    int ItemNum;
    ListItem* first;
    ListItem* last;
};
List::List():ItemNum(0),first(NULL),last(NULL){}
List::~List()
{
    ListItem* current=NULL;
    ListItem* next=first;
    while(next)
    {
        current=next;
        next=next->next;
        delete current;
    }
}
void List::Add(const List&obj)
{
    for(ListItem* current=obj.first; current; current=current->next)
        AddItem(current->x,current->y);
}
void List::AddItem(int x, int y)
{
    ListItem* p=new ListItem(x,y);
    if(!last)
    {
        first=p;
    }
    else
    {
        last->next=p;
    }
    last=p;
    ItemNum++;
}
 
List& List::operator=(const List&obj)
{
    this->first=obj.first;
    this->last=obj.last;
    this->ItemNum=obj.ItemNum;
    return *this;
}
List operator+(const List&lh,const List&rh)
{
    List result;
    result=lh;
    result.Add(rh);
    return result;
}
ostream operator<<(ostream&out, List& obj)
{
    ListItem* current;
    for(current=obj.first; current; current=current->next)
        out << "(" << current->x << ", " << current->y << ")" << " ";
    return out;
}
int _tmain(int argc, _TCHAR* argv[])
{
    List first;
    List second;
    List result;
    first.AddItem(2,3);
    second.AddItem(4,5);
    result=first+second;
    cout<<result;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 01:13     Перегрузка оператора вывода
Посмотрите здесь:

Перегрузка оператора вывода в поток C++
C++ перегрузка оператора вывода
C++ Перегрузка оператора вывода
Перегрузка оператора вывода C++
Перегрузка оператора ввода вывода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
19.12.2012, 01:24     Перегрузка оператора вывода #2
C++
1
2
3
4
5
6
7
ostream operator<<(ostream&out, List& obj)
{
    ListItem* current;
    for(current=obj.first; current; current=current->next)
        out << "(" << current->x << ", " << current->y << ")" << " ";
    return out;
}
условие выхода из цикла...?
S_M_L
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3
19.12.2012, 01:31  [ТС]     Перегрузка оператора вывода #3
Выход из цикла будет когда current станет NULL
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
19.12.2012, 01:31     Перегрузка оператора вывода #4
нет. не то. Вообще-то у тебя две одинаковых структуры описаны, имена у них тоже одинаковые. Похоже что на то и ругается компилятор.
S_M_L
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3
19.12.2012, 02:02  [ТС]     Перегрузка оператора вывода #5
Дело в том, что если я объявляю в классе просто дружественную структуру(без дальнейшего ее описания)
C++
1
2
3
4
5
6
7
8
9
10
11
struct ListItem{...};
 
class List{
public:
    friend struct ListItem;
    ...
    private:
    int ItemNum;
    ListItem* first;
    ListItem* last;
};
, то появляются проблемы с доступом к private элементам.

Ели же просто описываю структуру в классе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class List{
public:
    struct ListItem{
        int x;
        int y;
        ListItem* next;
        ListItem(int x, int y, ListItem* next=NULL)
        {
            this->x=x;
            this->y=y;
            this->next=next;
        }
    };
    List();
    ...
private:
    int ItemNum;
    ListItem* first;
    ListItem* last;
};
, пропадает доступ к элементам структуры.
Yandex
Объявления
19.12.2012, 02:02     Перегрузка оператора вывода
Ответ Создать тему
Опции темы

Текущее время: 13:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru