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