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 :

definition de code au fichier.cpp


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut definition de code au fichier.cpp
    jai définit ce code dans le fichier.cpp sans mettre la déclaration au fichier.h
    code;:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ostream& operator<<(ostream& out, const Jeu& j) {
      for (unsigned int i(0); i < j.size(); ++i)
        out << "  + " << *(j[i]);// ligne d'erreur
      return out;
    }
    voila le msg d'erreur:
    binary '<<' : no operator defined which takes a right-hand operand of type 'class Carte' (or there is no acceptable conversion)

    Aidez moi SVP ç urgent

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Tu as défini dans Jeu operator [] comme renvoyant un objet de type Carte, objet que tu tentes d'afficher par un flux alors que tu n'as pas défini d'opérateur << prenant un objet de type Carte.
    That's all !

    PS1/ Le message d'erreur est ici très clair, avec le temps il serait bien d'apprendre à les lire.
    PS2/ Urgent ? On est pas là pour te servir, ton message n'est pas plus urgent qu'un autre.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui jai compris ce que tu veux dire le pb que jai ç que je suis débutante en C++ et jessaye de me familiariser avec les fichier header et ficher.cpp je cherche des codes en Net pr séparer le code de sa définition
    Pour ce code je ne sais po pq me donne cette erreur parce que ca fonctionne tres bien lorsque tt le code et réunit dans le mm fichier.cpp
    pouvez-tvous me clarifier le pb SVP.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Personne n'a aucune idee

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par info_ Voir le message
    Personne n'a aucune idee
    Si. Soit tu as oublié de créer certaines fonctions, soit tout n'est pas visible là où il le devrait, soit tu ne compiles/linkes pas tout correctement.

    Dans tout les cas, sans avoir le code, il va être difficile de répondre.

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    voila le fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Jeu.h
    class Jeu : public vector<Carte*> {
    public:
    	Jeu(){ cout << "On change de main" << endl; }
    	virtual ~Jeu(){}
      void jette();
    };
    et le fichier.cpp
    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
     
    //Jeu_cpp.cpp
    ostream& operator<<(ostream& out, const Jeu& j) {
    	// surcharge d'opprrateur <<
      for (unsigned int i(0); i < j.size(); ++i)
        out << "  + " << *(j[i]);
      return out;
    }
     
    void Jeu::jette() {
    	// declaration de la fonction jette
      cout << "Je jette ma main." << endl;
      while (!empty()) {
        delete (*this)[size()-1];// vider l'objet this pour la taille size - 1
        pop_back();//supprime le dernier élément du vecteur
      }
    }
    quand on compile le code on recoit une erreur a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    out << "  + " << *(j[i]);
    en affichant :
    '<<' : no operator defined which takes a right-hand operand of type 'class Carte' (or there is no acceptable conversion)
    Merci

  7. #7
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Tu as défini dans Jeu operator [] comme renvoyant un objet de type Carte, objet que tu tentes d'afficher par un flux alors que tu n'as pas défini d'opérateur << prenant un objet de type Carte.
    Ce qu'il nous faut, c'est le code de Carte.

    Sinon, NE JAMAIS HERITER PUBLIQUEMENT DES CONTENEURS DE LA STL.
    Ils n'ont pas destructeurs virtuels, ce qui peut causer des bugs si on passe un objet de la classe dérivée là où on attend le conteneur de base.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    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
    //Carte.h
    class Carte{
    protected:
      unsigned int cout;
    public:
      Carte(unsigned int cout = 0) : cout(cout) {
    	 //Constructeur
        // cout << "  une carte de cout " << cout << " : ";
      }
      virtual ~Carte(){
      //Destructeur
      }
      virtual void afficher(ostream& out) const {
        out << "de coût " << cout; }
    };
    Carte.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ostream& operator<<(ostream& out, const Carte& c) {
      c.afficher(out);
      return out;
    }
    quand je groupe les deux codes dans le fichier Carte.h je ne recois plus le msg d'erreur je recois un 2eme au niveau de main
    pour
    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
     
    int main()
    {
      Jeu mamain;
     
      mamain.push_back(new Terrain(Couleur::BLEU));
      mamain.push_back(new Creature(6, "Golem", 4, 6));
      mamain.push_back(new Sortilege(1, "Croissance Gigantesque",
               "La créature ciblée gagne +3/+3 jusqu'à la fin du tour"));
      mamain.push_back(new CreatureTerrain(2, "Ondine", 1, 1, Couleur::BLEU));
     
      cout << "La, j ai en stock :" << endl;
      cout << mamain;
     
      mamain.jette(); //la ligne d'erreur
    // msg d'erruer: '<<' : no operator defined which takes a right-hand operand //of type 'class Jeu' (or there is no acceptable conversion)
     
      return 0;
    }

  9. #9
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Ton compilateur ne va pas magiquement connaître l'operateur << sur Carte, il se plaint donc. Pour éviter cela il faut ajouter le prototype de ton operateur à la fin de Carte.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //carte.h
    std::ostream& operator<<(std::ostream& out,const Carte& c) ;
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui Merci bien
    ç vrai le pb est résolu merci bien
    ç tres gentil de votre part

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 06/05/2014, 16h38
  2. Conseil et code ouverture fichier word...
    Par Angeldu74 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/04/2006, 08h37
  3. flash code pour fichier video probleme swf
    Par fasilafer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 09h37
  4. [Upload] un bug ds un code de fichiers
    Par jack_1981 dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2005, 12h44
  5. Réponses: 7
    Dernier message: 22/11/2005, 14h05

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