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 :

probleme sur destructeur virtuel


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut probleme sur destructeur virtuel
    Bonsoir,


    dans mon vieux livre de c++, je viens d'arriver aux fonctions virtuelles et plus particulièrement au destructeur virtuel. Mais quand je comple le code example j'ai une erreure

    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
    31
    32
    33
    34
    #include <iostream>
     
    using namespace std;
     
    class Base
    {
       public :
     
          virtual ~Base () = 0
          {
             cout << "Base destructor" << endl;
          }
    };
     
    class Deriv : public Base
    {
       public :
     
          ~Deriv ()
          {
             cout << "Deriv constructor" << endl;
          }
    };
     
    int main ()
    {
       Base *pb;
     
       pb = new Deriv;
     
       delete pb;
     
       return EXIT_SUCCESS;
    }

    C:\Codeblocks_projects\c++\chp9\test\main.cpp|9|error: pure-specifier on function-definition|
    ||=== Build finished: 1 errors, 0 warnings ===|



    si je comprends bien je ne peux pas faire de declaration dans une fonction purement virtuelle, pourtant sur le bouquin ça marche, est-ce que c'est dû au fait que ce livre doit être pre-ANSI c++ ??

    merci

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut
    ensuite quand j'enlève le corps de la fonction de la fonction virtuelle je peux compiler mais j'ai des erreurs lors de la build.

    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
    31
    #include <iostream>
     
    using namespace std;
     
    class Base
    {
       public :
     
          virtual ~Base () = 0;
    };
     
    class Deriv : public Base
    {
       public :
     
          ~Deriv ()
          {
             cout << "Deriv constructor" << endl;
          }
    };
     
    int main ()
    {
       Base *pb;
     
       pb = new Deriv;
     
       delete pb;
     
       return EXIT_SUCCESS;
    }
    obj\Debug\main.o||In function `ZSt17__verify_groupingPKcjRKSs'
    \mingw\include\c++\3.4.5\bits\locale_facets.tcc|2508|undefined reference to `Base::~Base()'|
    \mingw\include\c++\3.4.5\bits\locale_facets.tcc|2514|undefined reference to `Base::~Base()'|
    \mingw\include\c++\3.4.5\bits\locale_facets.tcc|2508|undefined reference to `Base::~Base()'|
    \mingw\include\c++\3.4.5\bits\locale_facets.tcc|2514|undefined reference to `Base::~Base()'|
    ||=== Build finished: 4 errors, 0 warnings ===|

  3. #3
    screetch
    Invité(e)
    Par défaut
    je crois que tu ne peux pas mettre le pure specifier (= 0) lorsque tu donnes au meme moment la definition de la fonction. il faut d'abord en donner l'interface (en precisant pur) puis la definition plus bas (soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Base
    {
       public :
     
          virtual ~Base () = 0;
    };
    Base::~base()
    {
      ...
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par exhortae Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Base
    {
       public :
     
          virtual ~Base () = 0
          {
             cout << "Base destructor" << endl;
          }
    };
    Le code est correct dans ses principes, mais comporte une erreur de syntaxe.
    Citation Envoyé par La norme 10.4/2
    a function declaration cannot provide both a purespecifier and a definition
    Donc ré écrit ainsi, le code devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Base
    {
       public :
     
          virtual ~Base () = 0;
    };
     
    Base::~Base()
    {
       cout << "Base destructor" << endl;
    }

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Envoyé par La norme 10.4/2
    a function declaration cannot provide both a purespecifier and a definition
    D'ailleurs, pour quelle raison ?

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut
    Ok Merci


    va falloir que je me décide à faire sortir les définitions de fonctions des déclarations des classes.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 05/11/2013, 17h10
  2. Réponses: 5
    Dernier message: 28/04/2011, 10h58
  3. Precision sur les destructeurs virtuels
    Par Linu6 dans le forum C++
    Réponses: 15
    Dernier message: 01/07/2008, 01h46
  4. [MFC] probleme sur le destructeur
    Par sebpsi dans le forum MFC
    Réponses: 3
    Dernier message: 04/04/2008, 16h48
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 20h01

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