Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur lors de la création de mon constructeur par copie

J'ai du mal, je l'avoue

    2 avril 2008 à 19:29:45

    Bonjour tout le monde,

    J'essaie une fois pour tout de comprendre ce qu'il ne va pas dans ma construction de mon constructeur par copie.

    Je préfère perdre un peu de temps dessus et comprendre (avec votre aide) ce qui se passe, comme cela, le problème ne se reproduira plus.

    Voici la situation :

    J'ai une classe nommée Vehicule3 qui est comme ceci :

    1. class Vehicule3
    2. {
    3. public:
    4.         Vehicule3();
    5.         Vehicule3(Vehicule3& Modele); //constructeur par copie
    6.         ~Vehicule3();
    7.         bool            Immatriculation(const char* UneImmatriculation);
    8. private:
    9.         CChaine         m_Immatriculation;
    10.         short           m_NombreDePersonnes;
    11. };


    Elle contient donc deux données membres (désolé pour les CChaine ou char* mais pour l'instant le Prof ne nous a pas encore enseigné le string, ça viendra)

    J'ai déclaré un constructeur par copie.

    Dans le cpp, je crée mon constructeur par copie :

    1. Vehicule3::Vehicule3(const Vehicule3& Source)
    2. :m_Immatriculation(Source.m_Immatriculation),m_NombreDePersonnes(Source.m_NombreDePersonnes)
    3. {
    4. }


    J'obtiens ces deux messges d'erreur :

    Citation : mon compilateur bien aimé

    'Vehicule3::Vehicule3' : overloaded member function 'void (const class Vehicule3 &)' not found in 'Vehicule3'



    Citation : mon compilateur bien aimé

    fatal error C1004: unexpected end of file found



    Si je comprends bien le premier message, il me dit qu'il ne trouve pas le constructeur dans la classe Vehicule3, il y est bien pourtant ?

    Merci d'avance pour votre aide.

    beegees
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      2 avril 2008 à 19:35:05

      Vehicule3::Vehicule3(const Vehicule3& Source)

      Vehicule3(Vehicule3& Modele);

      rajoute le const dans le header
      • Partager sur Facebook
      • Partager sur Twitter
        2 avril 2008 à 19:35:56

        parce que c'est

        1. MaClasse
        2. {
        3. public:
        4.     MaClasse();
        5.     MaClasse( const MaClasse & autre );
        6.     // ...
        7. };

        [grilled]

        remarque le const!

        Mais pour ton cas il est inutile de définir le constructeur par copie il se fait automatiquement.

        C'est quoi CChaine?

        Question? vas-tu vraiment copier des véhicules? Tu devrais déclarer constructeur par copie en private pour l'empêcher et passer tes objets par référence (constantes).

        • Partager sur Facebook
        • Partager sur Twitter
          2 avril 2008 à 19:37:32

          Citation : Prsieux

          Vehicule3::Vehicule3(const Vehicule3& Source)

          Vehicule3(Vehicule3& Modele);

          rajoute le const dans le header



          Salut,

          Merci pour ta réponse.

          S'était tout bête, ça ne se reproduira plus, merci.

          Tient, niveau principe, saurais-tu me dire ce que le constructeur va mettre dans m_Immatriculation ?

          Il y met les valeurs du constructeur par défaut dans le constructeur par copie ?

          Encore merci.

          beegees

          Salut Mattex,

          Merci pour l'info.

          Pourquoi mon objet ne va-t'il pas être copié ?

          S'est parce que s'est une classe de base et qu'elle n'est pas complète je présûme ?

          Merci
          beegees
          • Partager sur Facebook
          • Partager sur Twitter
            2 avril 2008 à 19:41:13

            Citation : beegees

            Tient, niveau principe, saurais-tu me dire ce que le constructeur va mettre dans m_Immatriculation ?

            Il y met les valeurs du constructeur par défaut dans le constructeur par copie ?



            Non, il va mettre la valeur de Source.m_Immatriculation. si m_Immatriculation est un pointeur, tu vas avoir des problèmes. Tu dois copier les valeurs pointées de tes pointeurs dans de nouveaux espaces en mémoire. OUUUUUU empêcher la copie.
            • Partager sur Facebook
            • Partager sur Twitter
              2 avril 2008 à 19:46:50

              Merci pour ta réponse Mattex,

              Saurais-tu me dire où il va aller chercher la valeur de m_Immatriculation ?

              Désolé, mais avec ce constructeur, ça passe pas :-°

              Merci
              beegees
              • Partager sur Facebook
              • Partager sur Twitter
                2 avril 2008 à 20:48:49

                <parenthèse>
                Copier des véhicule n'a strictement aucun sens (vu que c'est typiquement une entité) ... => interdire la copie (enfin, c'est comme ça qu'il faut faire en vrai)
                </>
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  2 avril 2008 à 21:32:58

                  Citation : lmghs

                  <parenthèse>
                  Copier des véhicule n'a strictement aucun sens (vu que c'est typiquement une entité) ... => interdire la copie (enfin, c'est comme ça qu'il faut faire en vrai)
                  </>



                  ok un grand merci pour ta réponse.

                  je voulais juste avoir la confirmation que ça ne servait à rien de copier ce genre d'entité.

                  beegees
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 avril 2008 à 21:45:52

                    Il rare que copier des entités ait un quelconque intérêt. Chaque entité a une identité différente, s'il devient possible de les copier, on les clone et ne fait plus évoluer l'état de l'entité originale, mais celui d'une nouvelle qui lui ressemblait vachement au départ.

                    En revanche, les valeurs (chaines, données mathématiques, ...) n'ont aucune notion d'identité attachée, là on copie et compare à tour de bras.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                    Erreur lors de la création de mon constructeur par copie

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown