Witam
Jak powinienem poprawnie zdefiniować własną klasę, aby mogła zostać użyta jako parametr w innej klasie szablonowej?
Konkretniej, mam szablon dla klasy będącej macierzą dowolnych obiektów, i wrzucam do niej własną klasę, klasa ta ma przeładowane operatory dodawania, przypisania, itp.
template <class typ>
Matrix<typ> Matrix<typ>::operator*(Matrix<typ> &macierz1)
{
Matrix<typ> macierz(wierszy, macierz1.kolumn);
typ** wsk1;
typ** wsk2;
typ** wsk3;
wsk1=macierz.tablica;
wsk2=macierz1.tablica;
wsk3=tablica;
typ wynik;
int i;
int j;
int k;
for(i=0; i<wierszy; i++)
{
for(j=0; j<macierz1.kolumn; j++)
{
wynik=*(*(tablica+i))*(*(*(macierz1.tablica)+j));
*(*(macierz.tablica+i)+j)=wynik;
for(k=1; k<macierz1.wierszy; k++)
{
*(*(macierz.tablica+i)+j)=*(*(macierz.tablica+i)+j)+*(*(tablica+i)+k)* (*(*(macierz1.tablica+k)+j));
}
}
}
return macierz;
}
}
Complex Complex::operator+(Complex &liczba1)
{
Complex wynik;
wynik.re=liczba1.re+re;
wynik.im=liczba1.im+im;
return wynik;
}
void Complex::operator=(Complex &liczba1)
{
re=liczba1.re;
im=liczba1.im;
}
Kompilator zwraca dla działań z mnożeniami i równa się
error: no match for ‘operator+’ in ‘(((macierz.Matrix<Complex>::tablica + ((unsigned int)(((unsigned int)i) * 4u)))) + ((unsigned int)(((unsigned int)j) * 8u))) + Complex::operator*(Complex&)(((Complex&)((*(macierz1->Matrix<Complex>::tablica + ((unsigned int)(((unsigned int)k) * 4u)))) + ((unsigned int)(((unsigned int)j) * 8u)))))’|
error: no match for ‘operator+’ in ‘(((macierz.Matrix<Complex>::tablica + ((unsigned int)(((unsigned int)i) * 4u)))) + ((unsigned int)(((unsigned int)j) * 8u))) + Complex::operator*(Complex&)(((Complex&)((*(macierz1->Matrix<Complex>::tablica + ((unsigned int)(((unsigned int)k) * 4u)))) + ((unsigned int)(((unsigned int)j) * 8u)))))’|
note: candidates are: Complex Complex::operator+(Complex&)|
note: candidates are: void Complex::operator=(Complex&)|