Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегруженные операции в классе на шаблонах, не получаеться наследовать 
V
    Опции темы
ne0n
Дата 22.4.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: нет
Всего: 11



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

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

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>        ]


подскажите в чем проблема?
PM MAIL ICQ   Вверх
Lazin
Дата 22.4.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



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

Код

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

PM MAIL Skype GTalk   Вверх
Alek86
Дата 22.4.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



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

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

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

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

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



--------------------
user posted image    user posted image
PM MAIL   Вверх
ne0n
Дата 22.4.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: нет
Всего: 11



Сапасибо, за помощь ребят за оперативную помощ smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.