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 : 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;
}
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