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 :

Deux Classes avec le m�me nom d�clar� dans Deux CPP diff�rents [Langage/Algorithme]


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut Deux Classes avec le m�me nom d�clar� dans Deux CPP diff�rents
    Deux Classes avec le m�me nom d�clar� dans Deux CPP diff�rents

    Selon vous, est-ce un bug ?
    Pour info c'est dans XE2 Update 4, j'ai pas test� avec d'autres versions

    J'ai DEUX CPP :
    - TFormMachin
    - TFormBidule

    Dans chaque CPP , j'ai d�clar� un TComboObj
    TComboObj est interne au CPP, aucune r�f�rence dans le H
    TComboObj est ajout� par Items->AddObject et utilis� par Items->Objects[]Le but �tant d'avoir un objet contenant des infos permettant de g�rer des Items de ComboBox


    Dans TFormMachin
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class TComboObj : public TObject
    {
    public:
      /*constructor*/__fastcall TComboObj(const AnsiString AIdent)
        : Ident(AIdent) {ShowMessage("TFormMachin::" + ClassName());}
     
      // Membres Publiques
      AnsiString Ident;
     
        /*destructor*/virtual __fastcall ~TComboObj() {ShowMessage("TFormMachin::~" + ClassName());}
    };
    Dans TFormBidule
    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
     
    class TComboObj : public TObject
    {
    public:
      /*constructor*/__fastcall TComboObj(const AnsiString AIdent)
        : Code(0),
          Ident(AIdent) {ShowMessage("TFormBidule::" + ClassName() + "(s)");}
     
      /*constructor*/__fastcall TComboObj(const int ACode, const AnsiString AIdent)
        : Code(ACode),
          Ident(AIdent) {ShowMessage("TFormBidule::" + ClassName() + "(i, s)");}
     
      // Membres Publiques
      int Code;
      AnsiString Ident;
     
        /*destructor*/virtual __fastcall ~TComboObj() {ShowMessage("TFormBidule::~" + ClassName());}
    };
    Pour tester :

    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
     
    void __fastcall TFormMachin::FormDblClick(TObject *Sender)
    {
      TComboObj* obj = new TComboObj(-1); // ShowMessage TFormMachin::TComboObj
      delete obj; // TFormMachin::~TComboObj
    }
     
    void __fastcall TFormBidule::FormDblClick(TObject *Sender)
    {
      TComboObj* obj = new TComboObj(-1, "Mon Bidule"); // ShowMessage TFormBidule::TComboObj(i, s)
      try {delete obj;} // ShowMessage TFormMachin::~TComboObj
      catch(const Exception &e) {ShowMessage("Mon Bidule " + e.Message);} // VA pour destruction de la Chaine
     
      TComboObj* obj2 = new TComboObj("Mon autre Bidule"); // ShowMessage TFormMachin::TComboObj ???
      delete obj2; // TFormMachin::~TComboObj ???
    }
    Joli, il se trompe de destructeur, histoire d'obj !
    Il se trompe m�me de constructeur si m�me param�tre !
    La liaison des OBJ a fait des merveilles !
    Il pourrait signaler un probl�me, au moins un warning !

    Si vous pensez que c'est un bug ou un manque d'info du lieur, j'irais le mettre dans le Quality Central
    Si vous pensez que c'est une erreur de conception, c'est pas totalement faux, j'avais du code dupliqu� pouvant �tre refactor�


    En d�finissant un namespace ou un nom de classe diff�rente, cela r�sout �videmment le probl�me !
    Personnellement, j'ai d�plac� mon code dans une unit� commune utilis�e par les diff�rentes TForm utilisant des Combo (toujours associ� � un Ident Chaine et � une �num�ration)

    J'ai refactor� mon code pour �viter ce probl�me �viter les doublons surtout pour TIdentObjConnectionQuality (utilis� deux fois mais cod� diff�rement deux fois pour le m�me r�sultat)

    le code suivant pour les curieux, les textes sont dans un fichier de lang
    Ident c'est un code texte �quivalent � un System.TypInfo.GetEnumValue\GetEnumName mais en utilisant System.Classes.IdentToInt\IntToIdent
    C'est plus l�ger que les template GET_ENUM_TYPEINFO\DECLARE_ENUM_TYPEINFO

    TIdentObjConnectionQuality est utilis� dans DEUX TForm, je n'ai plus de code en double, c'est nettement plus propre
    TIdentObjTestConnectionDepth est utilis� dans une seule TForm

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    //---------------------------------------------------------------------------
    #ifndef ShaiDVRDahuaTechnology_IHM_UtilsH
    #define ShaiDVRDahuaTechnology_IHM_UtilsH
    //---------------------------------------------------------------------------
    #include <vcl.h>
    //---------------------------------------------------------------------------
    #include "ShaiDVRDahuaTechnologyLibraryClasses.h"
    //---------------------------------------------------------------------------
     
    /* Forward Declarations */
    class TShaiLang;
     
    namespace ShaiDVRDahuaTechnology
    {
    namespace IHM_Utils
    {
    //---------------------------------------------------------------------------
    //            ShaiDVRDahuaTechnology::IHM_Utils::TComboManager             -
    //---------------------------------------------------------------------------
    class TComboManager : public TObject
    {
    public:
      // Méthodes publiques
      static void FillCombo(TComboBox *ACombo, TClass AClass, int CurrentValue, int LowValue, int Count, TShaiLang *AShaiLang);
      static void ClearCombo(TComboBox *ACombo);
    };
     
    //---------------------------------------------------------------------------
    //              ShaiDVRDahuaTechnology::IHM_Utils::TIdentObj               -
    //---------------------------------------------------------------------------
    class TIdentObj : public TObject
    {
    public:
      /*constructor*/__fastcall TIdentObj(const AnsiString AIdent)
        : Ident(AIdent) {}
     
      // Membres Publiques
      AnsiString Ident;
    };
     
    //---------------------------------------------------------------------------
    //      ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjConnectionQuality      -
    //---------------------------------------------------------------------------
    class TIdentObjConnectionQuality : public TIdentObj
    {
    public:
      // Constructeurs Publiques
      /*constructor*/__fastcall TIdentObjConnectionQuality(int AValue)
        : TIdentObj(TShaiDVRDahuaTechnologyClientManager::ConnectionQualityToIdent((TShaiDVRDahuaTechnologyConnectionQuality)AValue)),
          Value((TShaiDVRDahuaTechnologyConnectionQuality)AValue) {}
     
      // Membres Publiques
      TShaiDVRDahuaTechnologyConnectionQuality Value;
    };
     
    //---------------------------------------------------------------------------
    //     ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjTestConnectionDepth     -
    //---------------------------------------------------------------------------
    class TIdentObjTestConnectionDepth : public TIdentObj
    {
    public:
      // Constructeurs Publiques
      /*constructor*/__fastcall TIdentObjTestConnectionDepth(int AValue)
        : TIdentObj(TShaiDVRDahuaTechnologyClientManager::TestConnectionDepthToIdent((TShaiDVRDahuaTechnologyTestConnectionDepth)AValue)),
          Value((TShaiDVRDahuaTechnologyTestConnectionDepth)AValue) {}
     
      // Membres Publiques
      TShaiDVRDahuaTechnologyTestConnectionDepth Value;
    };
     
    //---------------------------------------------------------------------------
    //           ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjFactory           -
    //---------------------------------------------------------------------------
    typedef TClass TIdentObjClass;
    class TIdentObjFactory : public TObject
    {
    public:
      // Fabrique d'instance
      static TIdentObj* Create(TIdentObjClass AClass, int AValue);
    };
    }; /* namespace IHM_Utils */
    }; /* namespace ShaiDVRDahuaTechnology */
    //---------------------------------------------------------------------------
     
     
     
     
    //---------------------------------------------------------------------------
    #endif
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    //---------------------------------------------------------------------------
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #include "ShaiDVRDahuaTechnology_IHM_Utils.h"
    //---------------------------------------------------------------------------
    #include "ShaiLang.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
     
    //---------------------------------------------------------------------------
    //            ShaiDVRDahuaTechnology::IHM_Utils::TComboManager             -
    //---------------------------------------------------------------------------
    using ::ShaiDVRDahuaTechnology::IHM_Utils::TComboManager;
     
    //---------------------------------------------------------------------------
    /*static*/ void TComboManager::FillCombo(TComboBox *ACombo, TClass AClass, int CurrentValue, int LowValue, int Count, TShaiLang *AShaiLang)
    {
      ACombo->ItemIndex = -1;
      for (int i = LowValue; i < Count; i++)
      {
        TIdentObj *Ident = TIdentObjFactory::Create(AClass, i);
        String IdentText = AShaiLang->Translate(Ident->Ident, AClass->ClassName());
        ACombo->Items->AddObject(IdentText, Ident);
        if (CurrentValue == i)
          ACombo->ItemIndex = ACombo->Items->Count - 1;
      }
    }
     
    //---------------------------------------------------------------------------
    /*static*/ void TComboManager::ClearCombo(TComboBox *ACombo)
    {
      for (int i = 0; i < ACombo->Items->Count; i++)
        delete ACombo->Items->Objects[i];
     
      ACombo->Items->Clear();
    }
     
    //---------------------------------------------------------------------------
    //           ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjFactory           -
    //---------------------------------------------------------------------------
    using ::ShaiDVRDahuaTechnology::IHM_Utils::TIdentObj;
    using ::ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjClass;
    using ::ShaiDVRDahuaTechnology::IHM_Utils::TIdentObjFactory;
     
    //---------------------------------------------------------------------------
    /*static*/ TIdentObj* TIdentObjFactory::Create(TIdentObjClass AClass, int AValue)
    {
      // équivalent C++ du code Delphi "Result := AClass.Create(AValue);"
      TIdentObj *Result = NULL;
      if (AClass == __classid(TIdentObjConnectionQuality))
        Result = new TIdentObjConnectionQuality(AValue);
      else if (AClass == __classid(TIdentObjTestConnectionDepth))
        Result = new TIdentObjTestConnectionDepth(AValue);
      return Result;
    }
    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

  2. #2
    Membre tr�s actif Avatar de Argol_Medusa
    Homme Profil pro
    Ing�nieur Radiofr�quences
    Inscrit en
    Ao�t 2005
    Messages
    208
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur Radiofr�quences
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 208
    Par d�faut
    Je suppose que tu as bien v�rifi� en cleanant avant de compiler histoire de ne pas attraper des liaisons � des objets anciens que le compilo penserait ne pas avoir besoin de recompiler,ceci pouvant expliquer cela.

    Il faut �tre certain avant de leur envoyer ( histoire de pas passer pour ... ), mais tel que tu le d�cris oui c'est un bug techniquement parlant, clairement.

    Par contre personnellement je me verrais mal leur expliquer que je l'ai trouv� en d�clarant 2 classes de meme nom dans 2 cpp diff�rents, je vois arriver le commentaire "et je peux savoir pourquoi vous avez fait �a???" ben .... heu ....

    Apr�s c'est plus une histoire de relations humaines que de technique.

    Je peux tester de mon cot� si tu veux pour confirmation du bug.

  3. #3
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Salut ShaiLeTroll
    Je ne sais pas si cela a de l'importance tes deux classes sont declarees en public, est ce qu'elles peuvent etre declarees en private, est ce que cela supprimerait le probleme

  4. #4
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    Citation Envoy� par Argol_Medusa Voir le message
    Je suppose que tu as bien v�rifi� en cleanant avant de compiler histoire de ne pas attraper des liaisons � des objets anciens que le compilo penserait ne pas avoir besoin de recompiler,ceci pouvant expliquer cela.
    Tout � fait, dans le projet d'origine, tu as un EXE qui appel un DLL qui en appel une seconde
    les TForm sont dans les DLL et int�gr�s comme des Frames dans l'EXE (propri�t� Parent, BorderStyle...), donc utilisation de Package et RTL Dynamique !

    En fait, j'ai reproduit le code dans un Exe tout neuf, si je le peux, je teste toujours dans un exe � part !

    Citation Envoy� par Argol_Medusa Voir le message
    Il faut �tre certain avant de leur envoyer ( histoire de pas passer pour ... ), mais tel que tu le d�cris oui c'est un bug techniquement parlant, clairement..
    Cela n'est pas mon 1er QC ! Je suis m�me pass� par la case Beta Test de XE2, j'ai vite remonter des trucs sur printf, format, try..catch, interface et Supports ... tous les trucs qui �tait doit d�j� bugg� (il est bien connu qu'une correction de bug en provoque un autre)

    Citation Envoy� par Argol_Medusa Voir le message
    Par contre personnellement je me verrais mal leur expliquer que je l'ai trouv� en d�clarant 2 classes de meme nom dans 2 cpp diff�rents, je vois arriver le commentaire "et je peux savoir pourquoi vous avez fait �a???" ben .... heu ....
    Parce qu'ils le font !
    TMessageForm dans FMX.Dialogs.pas ET TMessageForm dans VCL.Dialogs.pas
    On peut m�me voir qu'ils ont copi� celle de la VCL vers FMX en mettant en commentaire ce qui �tait en trop !
    C'est m�me ce qui m'a inspir� il y a des ann�es, j'avais vu par hasard TMessageForm dans la section implementation (�quivalent du CPP), c'est l� que j'ai d�couvert que l'on pouvait d�clarer une classe cach�e !

    et j'ai pens� au namespace parce qu'ils ont ouvert les hostilit�s en premier avec TButton et TButton

    En Delphi, il y a m�me une tricherie qui consiste � �crire ceci
    Code pascal : 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
    type
      TButton = class(StdCtrls.TButton)
      private
        FMessage : string;
        class var FCount: Integer;
      public
        constructor Create(AOwner: TComponent); override;
      end;
     
    constructor TButton.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
     
      Inc(Self.FCount);
     
      FMessage := Format('%d Instances de %s (%d + %d = %d)', 
        [Self.FCount, Self.ClassName, StdCtrls.TButton.InstanceSize, sizeof(FMessage), Self.InstanceSize]);
     
      OutputDebugString(PChar(FMessage));
    end;

    que l'on peut utilis� en c++
    Une Macro pour que le Builder soit bern�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    #define TButton Controldelphiimpl::TButton
    Les TButton dans la TForm seront les TButton modifi� qui affiche durant son constructeur notre petit message


    Citation Envoy� par Argol_Medusa Voir le message
    Apr�s c'est plus une histoire de relations humaines que de technique.

    Je peux tester de mon cot� si tu veux pour confirmation du bug.
    Sur QC, j'ai souvent eu Tomohiro Takahashi comme r�pondant, il est effectivement sans piti�

    Si tu veux tester, vas-y !



    Citation Envoy� par blondelle Voir le message
    Salut ShaiLeTroll
    Je ne sais pas si cela a de l'importance tes deux classes sont declarees en public, est ce qu'elles peuvent etre declarees en private, est ce que cela supprimerait le probleme
    Pas de diff�rence !
    Mais note que ces classes sont d�clar�s dans le CPP !
    Donc ne sont visibles QUE dans le CPP et nulle-part ailleurs !
    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

  5. #5
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 538
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 538
    Par d�faut
    Salut, est-tu certain que TComboObject ne soit pas "encapsul�" dans les classes des deux fiches .cpp diff�rentes ?
    Regarder dans le main() ,les fiches sont peut-�tre charg�es en ex�cution
    Parce que sinon je ne comprends pas pourquoi C++ Builder ne fait pas la distinction

    Dans chaque CPP , j'ai d�clar� un TComboObj
    TComboObj est interne au CPP, aucune r�f�rence dans le H
    d'accord mais on n'a pas assez de code
    Si tu as une TFormMachin le fichier .h doit ressembler �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class TFormMachin :TForm
    {
     
    };
    est-ce que TComboObj est d�clar� avant ou apr�s TFormMachin ?


    Citation Envoy� par ShaiLeTroll Voir le message
    Selon vous, est-ce un bug ?
    Pour info c'est dans XE2 Update 4, j'ai pas test� avec d'autres versions

    J'ai DEUX CPP :
    - TFormMachin
    - TFormBidule
    je ne pense pas que ce soit un bug....c'est � v�rifer mais en C/C++ tu peux tr�s bien d�clarer un type dans un fichier source et le m�me dans un autre fichier .cpp
    L� o� �a va coincer c'est si tu utilises le mot cl� extern..

  6. #6
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    Citation Envoy� par Mat.M Voir le message
    Salut, est-tu certain que TComboObject ne soit pas "encapsul�" dans les classes des deux fiches .cpp diff�rentes ?
    Je ne comprends pas la question !

    Le code du PREMIER TComboObj est dans un PREMIER CPP (en plein milieu) comme ceci

    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
    //---------------------------------------------------------------------------
    class TComboObj : public TObject
    {
    public:
      /*constructor*/__fastcall TComboObj(const AnsiString AIdent)
        : Ident(AIdent) {ShowMessage("TFormMachin::" + ClassName());}
     
      // Membres Publiques
      AnsiString Ident;
     
        /*destructor*/virtual __fastcall ~TComboObj() {ShowMessage("TFormMachin::~" + ClassName());}
    };
     
     
    void __fastcall TBeginningCPPMainForm::FormDblClick(TObject *Sender)
    {
      TComboObj* obj = new TComboObj(-1); // ShowMessage TFormMachin::TComboObj
      delete obj; // TFormMachin::~TComboObj
    }
    //---------------------------------------------------------------------------
    et un AUTRE CPP avec un AUTRE TComboObj (pareil en plein milieu du CPP)

    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
     
     
    class TComboObj : public TObject
    {
    public:
      /*constructor*/__fastcall TComboObj(const AnsiString AIdent)
        : Code(0),
          Ident(AIdent) {ShowMessage("TFormBidule::" + ClassName() + "(s)");}
     
      /*constructor*/__fastcall TComboObj(const int ACode, const AnsiString AIdent)
        : Code(ACode),
          Ident(AIdent) {ShowMessage("TFormBidule::" + ClassName() + "(i, s)");}
     
      // Membres Publiques
      int Code;
      AnsiString Ident;
     
        /*destructor*/virtual __fastcall ~TComboObj() {ShowMessage("TFormBidule::~" + ClassName());}
    };
     
    void __fastcall TLanguageBasicsForm::FormDblClick(TObject *Sender)
    {
      TComboObj* obj = new TComboObj(-1, "Mon Bidule"); // ShowMessage TFormBidule::TComboObj(i, s)
      try {delete obj;} // ShowMessage TFormMachin::~TComboObj
      catch(const Exception &e) {ShowMessage("Mon Bidule " + e.Message);} // VA pour destruction de la Chaine
     
      TComboObj* obj2 = new TComboObj("Mon autre Bidule"); // ShowMessage TFormMachin::TComboObj ???
      delete obj2; // TFormMachin::~TComboObj ???
    }
    Citation Envoy� par Mat.M Voir le message
    Regarder dans le main() ,les fiches sont peut-�tre charg�es en ex�cution
    TBeginningCPPMainForm cr�� par le Main
    TLanguageBasicsForm cr�� par un bouton sur TBeginningCPPMainForm



    Citation Envoy� par Mat.M Voir le message
    d'accord mais on n'a pas assez de code
    je ne vois pas quoi ajouter !
    J'ai mis tout le code que j'avais � disposition, il te suffit de cr�er deux form, de mettre dans chacune l'une ou l'autre variante et le code d'appel dans le OnDblClick !

    Citation Envoy� par Mat.M Voir le message
    est-ce que TComboObj est d�clar� avant ou apr�s TFormMachin ?
    TComboObj est DANS le CPP !
    en plein milieu, la d�claration de TFormMachin c'est dans le H !
    Donc bien apr�s !



    Citation Envoy� par Mat.M Voir le message
    je ne pense pas que ce soit un bug....c'est � v�rifer mais en C/C++ tu peux tr�s bien d�clarer un type dans un fichier source et le m�me dans un autre fichier .cpp
    tu te contredis !
    On peut effectivement d�clarer un type dans un CPP et le m�me dans un autre, mais le bug c'est qu'il les confondent !
    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

  7. #7
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 538
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 538
    Par d�faut
    Citation Envoy� par ShaiLeTroll Voir le message
    tu te contredis !
    On peut effectivement d�clarer un type dans un CPP et le m�me dans un autre, mais le bug c'est qu'il les confondent !
    ehhh faut pas s'�nerver comme �a !
    Je ne comprends pas ton �nervement, faut rester zen..
    J'�cris juste les id�es qui me viennent � l'esprit...

    bon ceci mis en parenth�se si le compilateur/�diteur de lien fait la confusion je pense que �a vient de l'�diteur de lien et du MAKEFILE g�n�r� mais je ne suis pas certain.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 24/03/2013, 12h58
  2. R�ponses: 5
    Dernier message: 23/09/2011, 16h45
  3. Utilisation de deux classes ayant le m�me nom
    Par Oosoos dans le forum Langage
    R�ponses: 1
    Dernier message: 29/12/2010, 17h40
  4. R�ponses: 7
    Dernier message: 29/08/2008, 12h16
  5. Deux instances avec le m�me nom.
    Par Denn's dans le forum MS SQL Server
    R�ponses: 3
    Dernier message: 14/03/2008, 09h09

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