IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Surcharger un opérateur pour un template ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur à ses heures perdues
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur à ses heures perdues

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Par défaut 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 : 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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Par défaut
    Citation Envoyé par godskitchen Voir le message
    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 :

    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    template<typename T>
    S<T>& S<T>::operator=(const S<T>& a)
    {
    	if(this==&a) return *this;
     
    	val=a;
    	return *this;
    }
    Salut, oui c'est une petite erreur
    le type de ta struct est s<T>...

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur à ses heures perdues
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur à ses heures perdues

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Par défaut
    cela fonctionne. Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/08/2011, 16h34
  2. surcharger l'opérateur ^ pour les doubles
    Par tlemcenvisit dans le forum C++
    Réponses: 6
    Dernier message: 09/05/2010, 23h07
  3. Réponses: 3
    Dernier message: 02/03/2010, 08h16
  4. Surcharge d'opérateur pour l'intelligence articielle
    Par cricri77200 dans le forum C++
    Réponses: 2
    Dernier message: 28/02/2008, 10h14
  5. Réponses: 2
    Dernier message: 11/01/2008, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo