Surcharger un opérateur pour un template ?
Bonsoir à tous,
Je suis en train de construire un template tout bête, mais lorsque je veux surcharger l'opérateur = j'ai une erreur dont je n'arrive à comprendre l'origine même après avoir cherché sur internet. Voici ma class avec les définition de fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| template<class T> struct S {
public:
S() : val(0) { }
S(const T& d) : val(d) { }
T& get_val();
const T& get_val() const;
void set_val(const T& d);
S& operator=(const S& a);
private:
T val;
};
template<class T> T& S<T>::get_val()
{
return val;
}
template<class T> S& S<T>::operator=(const S& a)
{
if(this==&a) return *this;
val=a;
return *this;
}
template<class T> void S<T>::set_val(const T& d)
{
val=d;
} |
Lorsque je défini la fonction template<class T> S& S<T>::operator=(const S& a) directement à l'intérieur de la classe, ça compile nickel ! En revanche, tel que c'est présenté ci-dessus j'obtiens ceci comme erreur :
error C2955: 'S'*: l'utilisation d'une classe modèle requiert une liste d'arguments modèle.
Je pense que cela doit provenir d'une erreur de syntaxe mais laquelle ?
Merci