С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
#1

template operator+ set - C++

27.03.2011, 08:52. Просмотров 743. Ответов 1
Метки нет (Все метки)

здраствуйте! при перегрузке оператора + столкнулся со странной ошибкой
C++
1
2
3
4
5
6
7
8
9
10
11
Set<TYPE> operator+(const Set<TYPE>& s1, const Set<TYPE>& s2);
...
template <typename TYPE> Set<TYPE> Set<TYPE>::operator+(const Set<TYPE>& s1, const Set<TYPE>& s2) {
    Set<TYPE> tmp(s1);
    for (iterator cur = s2.begin(); cur != s2.end(); cur++) {
        tmp << cur.iter->item
    }
    tmp << s2.end()->item;
 
    return tmp;
}
ругается при объявлении error C2804: бинарный "operator +" имеет слишком много параметров. Два параметра вроде нормально всё?

вот весь класс на всякий случай
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef SET_H
#define SET_H
 
#include "SetItem.h"
#pragma once
 
 
template <typename TYPE> class Set {    
private:
    SetItem<TYPE>       *_begin,
                        *_end;  
    int                 _size;
 
public:
    class iterator;
    Set<TYPE>();
    Set<TYPE>(const Set<TYPE> &q);
 
    bool operator<<(const TYPE &value);
    Set<TYPE> operator=(const Set<TYPE> &q);
    Set<TYPE> operator+(const Set<TYPE>& s1, const Set<TYPE>& s2);
 
    void erase(const iterator &first, const iterator &last);
 
    bool search(const TYPE &value);
    void clear();
    bool empty();
 
    SetItem<TYPE>* begin();
    SetItem<TYPE>* end();
 
};
 
template <typename TYPE> Set<TYPE>::Set<TYPE>() {
        _begin = 0;
        _end = 0;
        _size = 0;
}
 
template <typename TYPE> Set<TYPE>::Set<TYPE>(const Set<TYPE> &q) {
    this->clear;
    for (iterator cur = q.begin(); cur != q.end(); cur++) {
        (*this) << cur.iter->item;
    }
    *this << q.end().iter->item;
}
 
template <typename TYPE> bool Set<TYPE>::operator<<(const TYPE &value) {
        SetItem<TYPE> *pt = new SetItem<TYPE>(value);
        SetItem<TYPE> *cur = _end;
 
 
        if (empty()) {
            _begin = _end = pt;
            _size++;
        }
        else if (!(search(value))) {     
                _end->next = pt;
                _end = pt;
                _end->prev = cur;
                _size++;
        }
        
        return true;
}
 
template <typename TYPE> Set<TYPE> Set<TYPE>::operator=(const Set<TYPE> &q) {
    Set<TYPE> tmp;
    this->clear;
    for (iterator cur = q.begin(); cur != q.end(); cur++) {
        tmp << cur.iter->item;
    }
    tmp << q.end().iter->item;
 
    return tmp;
}
 
template <typename TYPE> Set<TYPE> Set<TYPE>::operator+(const Set<TYPE>& s1, const Set<TYPE>& s2) {
    Set<TYPE> tmp(s1);
    for (iterator cur = s2.begin(); cur != s2.end(); cur++) {
        tmp << cur.iter->item
    }
    tmp << s2.end()->item;
 
    return tmp;
}
 
template <typename TYPE> bool Set<TYPE>::search(const TYPE &value) {
    for (iterator current = _begin; current != _end; current++) {
        if (current.iter->item == value) {
            return true;
        }
    }
    if (_end->item == value) {
        return true;
    }
    return false;
}
 
template <typename TYPE> void Set<TYPE>::erase(const iterator &first, const iterator &last) {
        iterator it = first;
        while (it != last) {
            it++;
            delete it.iter->prev;
        }
        delete last.iter;
}
 
template <typename TYPE> void Set<TYPE>::clear() {
        erase(this->begin(), this->end());
}
 
template <typename TYPE> bool Set<TYPE>::empty() {
        return (_size == 0);
}
 
template <typename TYPE> SetItem<TYPE>* Set<TYPE>::begin() {
        return _begin;
}
 
template <typename TYPE> SetItem<TYPE>* Set<TYPE>::end() {
        return _end;
}
 
 
 
 
template <typename TYPE> class Set<TYPE>::iterator {
    template <typename TYPE> friend class Set;
private:
    SetItem<TYPE> *iter;
public:
    iterator(SetItem<TYPE>* pt) {
        iter = pt;
    }
    bool operator=(const SetItem<TYPE>* pt) {
        iter = pt;
 
        return true;
    }
    bool operator++() {
        SetItem<TYPE> *pt = iter;
        iter = pt->next;
 
        return true;
    }
    bool operator--() {
        SetItem<TYPE> *pt = iter;
        iter = pt->prev;
 
        return true;
    }
    bool operator!=(const iterator &Q) {
        return (iter != Q.iter);
    }
};
 
#endif
остальные функции исправно работают, в чём загвоздка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2011, 08:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос template operator+ set (C++):

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier - C++
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

'MyQueue' : use of class template requires template argument list - C++
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

Ошибка компиляции: template-id does not match any template declaration - C++
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

В чем различие template <typename T> от template <class T> ? - C++
Добрый день ! Заметил в новых книгах применение записи template &lt;typename T&gt; вместо template &lt;class T&gt; в чем же тогда фишка...

Visual Studio выдаёт ошибку при вынесении объявления функции с template в .h файл. Без template всё работает - C++
Проект содержит три файла: Source.cpp, arrTreat.h, arrTreat.cpp. Source.cpp: #include &lt;iostream&gt; using std::cout; using...

MSVC и template template classes - C++
Приветствую. Как в MSVC передать template template класс? Простой пример template&lt;template&lt;typename, typename&gt; class Return&gt; ...

1
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,252
27.03.2011, 09:03 #2
дак у тебя ТРИ а не Два параметра
Set<TYPE> =1
Set<TYPE>& s1=2
Set<TYPE>& s2=3
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2011, 09:03
Привет! Вот еще темы с ответами:

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

Вызов operator[] через operator[] const - C++
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как...

Реализация operator + через operator += - C++
внутри следующей темы возник вопрос, ответ на который так и не был получен: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.