template<class T>
class Sets
{
T value;
private:
Sets *Next;
Sets *Prev;
//некоторые детали реализации(методы, конструкторы и т.д.)
//..........................................
//Перегрузка операции "=" для элемента класса Sets
Sets<T> operator=(Sets<T> *MySet)
{
Sets<T> *CurSet = MySet->Get_First();
while(CurSet!=NULL)
{
if(CurSet==CurSet->Get_First())
this->Set_Value(CurSet->Get_Value());
else
this->Push(new Sets<T>(CurSet->Get_Value()));
CurSet=CurSet->Get_Next();
}
return *this;
}
//================================================
//Перегрузка операции "+" для элемента класса Sets
Sets<T>* operator+(Sets<T> MySet)
{
Sets<T> *OutSetAdd;
Sets<T> *currentTHIS = this->Get_First();
Sets<T> *currentMySet = MySet.Get_First();
while((currentTHIS!=NULL)||(currentMySet!=NULL))
{
if(currentTHIS!=NULL)
{
if(currentTHIS==currentTHIS->Get_First())
//OutSetAdd.Set_Value(currentTHIS->Get_Value());
OutSetAdd = new Sets<T>(currentTHIS->Get_Value());
else
OutSetAdd->Push(new Sets<T>(currentTHIS->Get_Value()));
currentTHIS=currentTHIS->Get_Next();
}
else
{
if[/B((this->Get_Amount()==0)&&(currentMySet==currentMySet->Get_First()))
{
//OutSetAdd.Set_Value(currentMySet->Get_Value());
OutSetAdd = new Sets<T>(currentMySet->Get_Value());
}
else
if(currentMySet!=NULL)
{
OutSetAdd->Push(new Sets<T>(currentMySet->Get_Value()));
}
currentMySet=currentMySet->Get_Next();
}
}
return OutSetAdd;
}
//=================================================
>
Создание шаблона в C++
Реализовал шаблон "Множество" на языке C++ в среде C++ Builder. Сделал в нем перегрузку операций "+","-","*" - все работает. Когда же начал пытаться сделать типизированные указатели для данного шаблона(или как это правильно звучит), а затем произвести проделать операции "+","-","*" над ними и получаю: "E2096 Illegal structure operation". Решил добавить перегрузку этих операций для указателей, но ошибка как была, так и осталась. Подскажите пожалуйста, что делаю не так и как избавиться от этой ошибки, участок кода с перегрузкой операции "+", а также "=" привожу ниже:
Код:
Sets<T> operator=(Sets<T> *MySet)
Код:
Sets<T>& operator=(const Sets<T>& MySet)
Константная ссылка в аргументе, т.к. MySet не предполагается модифицировать, а возвращение результата по ссылке, чтобы можно было писать цепочки вида:
Код:
A = B = C;
Перегрузку "+" лучше сделать вообще не членом класса:
Код:
Sets<T> operator+(const Sets<T>& MySet1, const Sets<T>& MySet2)