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 :

error: virtual outside class declaration


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut error: virtual outside class declaration
    Bonjour,
    Je viens de commencer le CPP et c'est pas evident de faire javaToCpp mdrr donc voila j'essaye de faire mes propres exceptions et voici ce que le compilo me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    g++ -Wall -W -Wextra -Werror -pedantic -O -DNDEBUG -I./include -c exception.cc -o exception.o
    exceptioncc:19: error: virtual outside class declaration
    exception.cc:24: error: virtual outside class declaration
    exception.cc:24: error: prototype for `const char* MyException::what()' does not match any in class `MyException'
    exception.hh:15: error: candidate is: virtual const char* MyException::what() const
    gmake: *** [exception.o] Error 1
    et voici le code :
    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
     
    File Edit Options Buffers Tools C++ Help
    # include <iostream>
    # include <sstream>
    # include <exception>
    # include "exception.hh"
    MyException::
    MyException( const char * Msg, int Line )
    {
      std::ostringstream oss;
      oss << "Erreur ligne " << Line << " : "
          << Msg;
      this->msg = oss.str();
    }
    virtual MyException::~MyException() throw()
    {
     
    }
    virtual const char* MyException::what() throw()
    {
      return this->msg.c_str();
    }
    voici le .hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # include <iostream>
    # include <sstream>
    # include <exception>
    class MyException : public std::exception
    {
     
      public:
        MyException (const char *msg, int Line);
        virtual ~MyException () throw ();
        virtual const char *what() const throw();
      private :
        std::string msg;
    };
    et voici le main :
    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
     
    # include <iostream>
    # include <sstream>
    # include <exception>
    # include "exception.hh"
     
    //on n'inclut que les delarations
    int main()
    {
      try
        {
          throw MyException::MyException( "exception test", __LINE__ );
        }
      catch ( const std::exception & e )
        {
          std::cerr << e.what() << "\n";
        }
    }
    Franchement, je ne vois pas d'ou ça vient :
    la derniere je coirs que je dois mettre l'etoile * apres MyEception:: car ça correspond a ce que je lui ai dit dans le .hh
    sinon les deux premieres ça me dit rien !

    please Help !

    thx

  2. #2
    screetch
    Invité(e)
    Par défaut
    il ne faut pas remettre le mot cle virtuel lors de la definition de la fonction (dans le cpp).
    par contre il faut remettre le const tel qu'il etait.

  3. #3
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Merci pour ta reponse rapide, j'ai modifié ce que tu m'avais dit mais tjr pas de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exception_lexer.cc:24: error: prototype for `const char* MyException::what()' does not match any in class `MyException'
    exception_lexer.hh:15: error: candidate is: virtual const char* MyException::what() const
    voici ce que j'ai modifié dans le .CPP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MyException::~MyException() throw()
    {
     
    }
     
    const char* MyException::what() throw()
    {
      return this->msg.c_str();
    }
    C'est pas evident le CPP lol , merci encore

  4. #4
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Quand je modifie ben j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exception_lexer.cc: In function `const char* MyException::what()':
    exception_lexer.cc:25: error: invalid use of `this' in non-member function
    Je comprend pas, avec une ptite explication STP ça ira bcp mieux
    peut etre je dois la mettre en virtual pure car le compilo c quoi prendre
    la methode herité ou surchagée

    est ce bien cela ?

  5. #5
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    desolé j'ai oublié un const et t'aurais pu me dire : APPREND A LIRE LES MESSAGES D'ERREURS

    merci bcp

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Tu dois respecter le prototype dans le .h. En particulier, tu ne dois pas oublier le const après what ().

    Pour une explication sur le const, http://cpp.developpez.com/faq/cpp/?p...S_const_member.

    Tu n'es pas obligé de répéter les headers dans les différents fichiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # include <iostream>
    # include <sstream>
    # include <exception>
    dans exception.hh suffit et #include "exception.hh" dans les .cpp suffit.

    EDIT: en même temps, lol.

  7. #7
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Yes merci c'est sympa et conseil pour ceux qui passeront LIZEZ BIEN VOS MESSAGES D'ERREURS ils sont pas là pour faire jolie

    valable desormais pour moi aussi
    lol

    aa+

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

Discussions similaires

  1. error : 'tr' was not declared in this scope
    Par jimaitou dans le forum Débuter
    Réponses: 3
    Dernier message: 13/05/2009, 13h54
  2. soucis Catchable fatal error: Object of class stdClass
    Par nimbus_77 dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2008, 09h45
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. Réponses: 8
    Dernier message: 07/08/2007, 17h21
  5. Réponses: 3
    Dernier message: 03/06/2007, 15h29

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