Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[cpp][szablony] no match for ‘operator=’

Ostatnio zmodyfikowano 2021-03-10 21:29
Autor Wiadomość
aaaadam
Temat założony przez niniejszego użytkownika
[cpp][szablony] no match for ‘operator=’
» 2021-03-10 19:45:34
Witam, uczę się szablonów, mam problem z poniższym przykładem:
C/C++
#include <iostream>
using namespace std;
template < typename T >
T minimum( const T & lhs, const T & rhs ) {
   
return lhs < rhs ? lhs: rhs;
}
template < typename T >
class myClass {
public:
   
myClass( int t ) {
       
x = t;
   
}
   
T x;
   
bool operator <( const myClass & Obj ) const {
       
return this->x < Obj.x;
   
}
   
myClass & operator =( const myClass & k ) {
       
if( this == & k ) return * this;
       
       
this->x = k->x;
       
       
return * this;
   
}
}
;

int main() {
   
int a = 4;
   
int b = 3;
   
int i = minimum( a, b );
   
cout << i << endl;
   
   
double a2 = 40.5;
   
double b2 = 30.5;
   
double i2 = minimum( a2, b2 );
   
cout << i2 << endl;
   
   
myClass < int > a3( 66 );
   
myClass < int > b3( 99 );
   
myClass < int > i3 = minimum( a3, b3 );
   
cout << i3.x << endl;
   
   
myClass < double > a4( 0.5 );
   
myClass < double > b4( 0.1 );
   
myClass < double > i4( 0 );
   
i4 = minimum( a3, b3 );
   
cout << i4.x << endl;
   
}

proszę o pomoc, nie wiem jak się uprorać z tym operatorem
P-178271
pekfos
» 2021-03-10 19:51:27
Przypisanie masz zdefiniowane tylko między obiektami myClass z tym samym T. Operator powinien być szablonem żeby pozwolić na mieszanie typów.
P-178272
aaaadam
Temat założony przez niniejszego użytkownika
» 2021-03-10 19:59:09
dzięki za pomoc, a mógłbyś poratować kodem, bo nie wiem jak mam to zrobić... coś w stylu ?
C/C++
template < typename T >
class myClass {
public:
   
myClass( int t ) {
       
x = t;
   
}
   
T x;
   
bool operator <( const myClass & Obj ) const {
       
return this->x < Obj.x;
   
}
   
template < typename T2 > // <- tutaj nowy template ?
   
myClass & operator =( const myClass & k ) {
       
if( this == & k ) return * this;
       
       
this->x = k->x;
       
       
return * this;
   
}
}
;
P-178273
pekfos
» 2021-03-10 21:29:52
Jeszcze użyj tego T2, w przeciwnym razie robisz ten szablon po nic.
P-178274
« 1 »
  Strona 1 z 1