Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > перегруженные операции в классе на шаблонах


Автор: ne0n 22.4.2009, 15:17
Всем доброго времени суток. Суть проблемы такова:
Есть базовый класс на шаблонах(простенькая реализация своего контейнера)

в нем перегружены операции "+" и "="
Код

template < typename T > TContainer<T>& TContainer<T>::operator=(const TContainer<T>& _cnt) // присвоение контейнеров
template < typename T > TContainer<T>  TContainer<T>::operator+(const TContainer<T>& _cnt) // объединен. контейнеров


сам по себе класс работает без каких либо нареканий. 
перегруженные операции работают как надо.

От него наследуеться класс TText
Код

class TText : public TContainer <Cmystring>


собственно в TText присутсвует только конструктор, которые считывает строки из файла и добавляет их в контейнер.

и вот в чем проблема, если я хочю обьеденить два экземпляра класса TText например так:
Код

A = D + C; 


то компилятор ругаеться и выдает ошибку 

Код

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'TContainer<T>' (or there is no acceptable conversion)
1>        with
1>        [
1>            T=Cmystring
1>        ]
1>        ttext.h(16): could be 'TText &TText::operator =(const TText &)'
1>        while trying to match the argument list '(TText, TContainer<T>)'
1>        with
1>        [
1>            T=Cmystring
1>        ]


подскажите в чем проблема?

Автор: Lazin 22.4.2009, 15:31
нужно либо реализовать оператор присваивания для TText, либо сделать оператор присваивания ТContainer - шаблоном

Код

template<class T>
class TContainer
{
public:
 template<class A>
 TContainier<T>& operator = (const A& a)
 {
    ...
   return *this;
 }
};

Автор: Alek86 22.4.2009, 15:41
у тебя operator+ возвращает TContainer<T>
а operator= в классе TText замещается оператором по умолчанию:

Код
TText& operator=(const TText&);

а преобразования из TContainer <Cmystring> в TText нет

чтобы этого избежать нужно явно определить operator=

Код
struct TText : public TContainer<Cmystring> {
 TText& operator=(const TContainer<Cmystring>& _cnt);
};

Автор: ne0n 22.4.2009, 16:00
Сапасибо, за помощь ребят за оперативную помощ smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)