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 :
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager