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++Builder Discussion :

Unresolved external non compris


Sujet :

C++Builder

  1. #1
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Unresolved external non compris
    Bonjour
    J'ai donc crée une classe pour implémenter la faq.
    voici mon 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    //---------------------------------------------------------------------------
     
     
    #pragma hdrstop
    #include <iostream>
    #include <sstream>
    #include <exception>
    //#include "Exception.h"
     
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)
    /*---------------------------------------------------------------*/
    /*                CLASS EXCEPTION                                */
    /*---------------------------------------------------------------*/
    class Doc_exception : public std::exception
    {
    public:
    Doc_exception( const char * Msg, int Line )
    {
            std::ostringstream oss;
            oss << "Erreur paragraph " << Line << " : "
                << Msg;
            this->msg = oss.str();
    }
     
    virtual ~Doc_exception() throw()
    {
     
    }
     
    virtual const char * what() const throw()
    {
            return this->msg.c_str();
    }
    private:
        std::string msg;
    };
    Il est directement issue de la faq
    il y a pour les autres modules (çà ne compilait pas autrement) un include que je vous communique aussi
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef ExceptionH
    #define ExceptionH
    //---------------------------------------------------------------------------
    class Doc_exception : public std::exception
    {
    public:
        Doc_exception( const char * Msg, int Line );
        virtual ~Doc_exception() throw();
        virtual const char * what() const throw();
    private:
        std::string msg;
    };
    #endif
    mais le linkeur me ressort un unresolved external pour tous les classes qui appellent Doc_exception.
    A noter que si on retire le commentaire sur l'appel de l'include et qu'on retire l'a déclaration de la classe dans l'include, il y a une erreur de compilation tout aussi hermétique E2040 Déclaration terminée incorrectement **** Erreur du compilateur, alors que cet include est inclue avec succès par d'autres modules
    je vous joins le code dans ce cas:
    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
     
    //---------------------------------------------------------------------------
     
     
    #pragma hdrstop
    #include <iostream>
    #include <sstream>
    #include <exception>
    #include "Exception.h"
     
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)
    /*---------------------------------------------------------------*/
    /*                CLASS EXCEPTION                                */
    /*---------------------------------------------------------------*/
     
    Doc_exception( const char * Msg, int Line )
    {
            std::ostringstream oss;
            oss << "Erreur paragraph " << Line << " : "
                << Msg;
            this->msg = oss.str();
    }
     
    virtual ~Doc_exception() throw()
    {
     
    }
     
    virtual const char * what() const throw()
    {
            return this->msg.c_str();
    }
    Celui qui me mettra sur la voie sera

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Tu fais référence à la FAQ Comment créer son propre type d'exception ?

    Sauf que tu utilises C++Builder qui a son propre système d'exception basé sur la VCL Delphi !
    Voir le fichier classes.HPP, tu as de nombreuses exceptions pouvant t'inspirer !

    Par exemple, une exception où l'on peut fournir un code d'erreur supplémentaire

    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
    //---------------------------------------------------------------------------
    //                           TMyExceptionErrorType                          -
    //---------------------------------------------------------------------------
    enum TMyExceptionErrorType
      {meeErrorTruc,
       meeErrorMachin,
       meeErrorBidule
      };
     
    //---------------------------------------------------------------------------
    //                               EMyException                               -
    //---------------------------------------------------------------------------
    class EMyException : public Sysutils::Exception
    {
      typedef Sysutils::Exception inherited;
     
    private:
      // Membres Privés
      TMyExceptionErrorType FErrorType;
     
    public:
      // Constructeurs Publiques
      /*constructor*/inline __fastcall EMyException(const AnsiString &Msg, TMyExceptionErrorType AErrorType)
         : inherited(Msg), FErrorType(AErrorType) { }
     
      // Propriétés Publiques
      __property TMyExceptionErrorType ErrorType = {read=FErrorType};
    };






    Ensuite, tu as oublié la classe dans le CPP, comme tout objet c'est "class::method", c'est étrange que tu l'aie oublié !

    corrige, le 3eme code, je ne sais même pas comment il compile, le mot clé virtual ne pouvant pas être dans un CPP !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Doc_exception::Doc_exception( const char * Msg, int Line )
    /*virtual*/ Doc_exception::~Doc_exception() throw()
    /*virtual*/ const char * Doc_exception::what() const throw()
    Ensuite le mot clé "throw()" n'est pas très bien supporté dans les CPP, moi cela me faisait buggé l'IDE 2007, il voulait m'ajouter des accolades !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Merci
    J'ai donc repris le code en suivant tes directives. Mon code est devenu:
    fichier d'en tête:
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef ExceptionH
    #define ExceptionH
    //---------------------------------------------------------------------------
    class Doc_exception : public std::exception
    {
    public:
        Doc_exception::Doc_exception( const char * Msg, int Line );
        Doc_exception::~Doc_exception() throw();
        const char * Doc_exception::what() const throw();
    private:
        std::string msg;
    };
    #endif
    et fichier de 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    //---------------------------------------------------------------------------
     
     
    #pragma hdrstop
    #include <iostream>
    #include <sstream>
    #include <exception>
    #include <algorith>
    #include <list>
    #include <string>
    #include "Exception.h"
     
    //---------------------------------------------------------------------------
     
    //#pragma package(smart_init)
    /*---------------------------------------------------------------*/
    /*                CLASS EXCEPTION                                */
    /*---------------------------------------------------------------*/
     
    Doc_exception::Doc_exception( const char * Msg, int Line )
    {
            std::ostringstream oss;
            oss << "Erreur paragraph " << Line << " : "
                << Msg;
            this->msg = oss.str();
    }
     
    Doc_exception::~Doc_exception() throw()
    {
     
    }
     
    const char * Doc_exception::what() const throw()
    {
            return this->msg.c_str();
    }
    Ça compile et çà link, pour autant que tous les fichiers utilisant les exceptions incluent le header correspondant.
    C'est

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

Discussions similaires

  1. [CSS] style externe non pris en charge
    Par ravNin'- dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 26/10/2005, 00h22
  2. unresolved external symbol _IID_IDi
    Par PC23 dans le forum DirectX
    Réponses: 6
    Dernier message: 05/08/2005, 10h38
  3. PB de buil : unresolved external symbol
    Par dede92 dans le forum Windows
    Réponses: 8
    Dernier message: 13/12/2004, 11h21
  4. unresolved external symbol _IID_IDirectDraw7
    Par lvdnono dans le forum DirectX
    Réponses: 2
    Dernier message: 15/06/2004, 21h05
  5. Réponses: 4
    Dernier message: 23/04/2004, 16h06

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