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 :

Incompréhension d'une erreur à la compilation.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut Incompréhension d'une erreur à la compilation.
    Bonjour, j ai un code qui ressemble a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template<typename T> class A{
    /* ... */
    template<typename E> friend ostream& operator <<  (ostream&, const A<E>& );
    };
     
    template<typename E> ostream& A<E>::operator<<(ostream& out, const A<E>& G){
    /* .... */
    }
    et j'obtiens ce message du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    error: ‘std::ostream& A<E>::operator<<(std::ostream&, const A<E>&)’ must take exactly one argument
      template<typename E> ostream& A<E>::operator <<(ostream& out, const A<E>& G)                                                                                                                           ^
                                                                                                                               ^
    Je ne comprends pas cette histoire d'un seul argument vu que j'ai bien l'impression d'en déclarer deux...

    Edit :

    Je laisse ma question originale mais j'y adjoins un copier/coller d'un extrait du code réel... (malgré mes relectures je ne vois toujours pas ou est le problème...)
    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
     
    template<typename T> class Graph  {
    /* .... */
    template<class E>  friend  ostream& operator << (ostream&, const Graph<E>& );
     
        virtual
        ~Graph (){for(auto it=nodes.begin() ; it!=nodes.end(); it++) delete *it;}
      };
     
     template<class E> ostream& Graph<E>::operator << (ostream& out, const Graph<E>& G)
     {
       const string pad="   ";
       /* ... */
       return out;
    }

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct Foo {
       friend void function(const Foo& f);
    private:
       int i;
    };
     
    // function N'EST PAS une méthode de Foo, pas de
    // "void Foo::function(const Foo& f) {", mais
    void function(const Foo& f) {
       f.i = 1; // acces aux données privées (friend)
    }
    En ajoutant des templates, ça ne change rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template<typename T>
    class A {
       /* ... */
       template<typename E>
       friend ostream& operator <<  (ostream&, const A<E>& );
    };
     
    template<typename E>
    ostream& operator<<(ostream& out, const A<E>& G) {
       /* .... */
       return out;
    }
    Ton implémentation actuelle est l'implémentation d'une méthode de la classe A (ou Graph), elle attend donc un seul paramètre (le stream), le deuxième étant "this", il est sous entendu.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut
    Qu'est ce que j suis teubé....
    Merci !!

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

Discussions similaires

  1. Personnaliser eclipse lors d'une erreur de compilation
    Par garf365 dans le forum Eclipse C & C++
    Réponses: 0
    Dernier message: 03/06/2009, 16h56
  2. Réponses: 3
    Dernier message: 25/02/2009, 18h09
  3. une erreur de --compilation-- kernel LINUX
    Par didine_napster dans le forum Administration système
    Réponses: 1
    Dernier message: 16/09/2007, 11h00
  4. Encore une erreur de compilation
    Par MarioNoFearS dans le forum C++
    Réponses: 3
    Dernier message: 02/06/2007, 13h05
  5. [Free Pascal] Aide pour comprendre une erreur de compilation
    Par SimoBenz dans le forum Free Pascal
    Réponses: 7
    Dernier message: 05/12/2006, 18h43

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