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 :

Erreur E2015 : Anbiguité entre ...


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut Erreur E2015 : Anbiguité entre ...
    Bonjours a tous,

    j'ai installé suiPack 5.6. Il a un objet suiMessageDialog (c'est un style de MessageBox)
    Il y a une propriété de cet objet : IconStyle qui peut prendre les parametre : suiNone, suiHelp, suiInformation, suiWarning, suiStop (comme les mtWarning, mtHelp ... d'un message box).

    Sauf que j'initialise se parametre par programme. Et en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiMessageDialog->IconType = suiHelp;
    Il le dit
    E2015 : Ambiguité entre "suiHelp" et "SuiTitleBar::suiHelp"
    Seulement avec suiHelp cette erreur apparait.


    Dans l'aide on peut voir :

    suiMessageDialog->IconType : TsuiIconType
    J'ai trouvé dans 2 .h SuiTitleBar.h et SuiDlg.h les 2 enumérations suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SuiTitleBar.h : enum TsuiTitleBarBtnType { suiMax, suiMin, suiClose, suiHelp, suiControlBox, suiCustom };
     
    SuiDlg.h : enum TsuiIconType { suiNone, suiWarning, suiStop, suiInformation, suiHelp };

    Donc si quelqu'un sait comment régler cette ambiguité.

    MERCI EN TT CAS[/code]

  2. #2
    Membre confirmé Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par défaut suiHelp
    Bonjour,

    Fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiMessageDialog->IconType = ::suiHelp;
    Jag

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    malheureusement c'est pareil. en faite cela viend d'un conflit entre deux ENUM (cf post plus haut que je viens de changer)


    Merci comme meme. Si quelqu'un a une idée.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    C'est sans doute la symbolique qui crée le problème.
    Peut-être en remplaçant par la valeur donnée par l'enumération.

    enum TsuiIconType { suiNone, suiWarning, suiStop, suiInformation, suiHelp };
    donc si suiNone vaut par défaut 0 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiMessageDialog->IconType = 4;
    A plus !

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Nikel sa marche. je ne savais pas qu'on pouvait utiliser un enum comme ceci.

    Sauf que j'obtiens des avertissements avec cette méthode :

    W8024 La classe de base 'base1' est aussi une classe de base de 'base2' **** Avertissement du compilateur.

    (Option de ligne de commande supprimant cet avertissement : -w-ibc)

    Une classe hérite directement et indirectement de la même classe de base. Il est recommandé d'éviter ce genre de programmation pour des raisons de portabilité.

    Donc si quelqu'un sait regler ceci. Je ne sais pas comment on rajoute une option dans la ligne de commande.

    MERCI EN TT CAS A TOUT LES DEUX

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Juste une idée comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiMessageDialog->IconType = SuiIconType :: suiHelp;
    Mets le nom du namespace qui correspond.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Je n'ai fait que citer l'enum et je n'ai pensé qu'à remplacer la symbolique par sa valeur telle
    qu'elle apparait dans cette enum !

    A plus !

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Trap D ce fut ma premiere idée mais cela n'a rien changé. J'était sur que sa allait fonctionner mais non :
    E2090 Le qualificateur 'identificateur' n'est pas une classe ou un nom d'espace de nommage **** Erreur du compilateur

    Le qualificatif C++ dans la construction qual::identificateur n'est pas un nom de structure ou de classe.
    Mais bon la solution de henderson marche très bien sauf que j'ai un avertissement. Si on ne peut pas régler cet avertissement cela n'est pas grave mais bon ... cela fait plus sérieux sans

  9. #9
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Ce sont des bugs assez fréquents dans les headers de C++ Builder. Ce que je fais pour ma part est de renommer dans un .h au choix entre les deux l'une des occurrences, par exemple on laisse suihelp dans l'un et l'on écrit suihelp1 ou _suihelp (ou autre chose) dans l'autre. Le conflit disparaît.

    À bientôt
    Gilles

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Au fait... où sont placés ces deux enum ?
    Dans une class et/ou globalement ou bien dans leur class respective ?
    L'ambiguïté est sûrement la !
    Voir dans le source (.h ou .hpp ?) le namespace dont ils relèvent.

    A plus !

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    MERCI Gilles Louïse c'est vrai sa marche j'ai essayer. sauf que après j'ai plein de petits prob si j'utilise l'enum où j'ai modifié un élément Mais dans l'absolue ta méthode marche aussi : MERCI BCP

    Alors henderson voila les deux enum :

    l'un dans le fichier suiDlg.hpp


    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
    #ifndef SUIDlgHPP
    #define SUIDlgHPP
     
    #pragma delphiheader begin
    #pragma option push -w-
    #pragma option push -Vx
    #include <SUIMgr.hpp>	// Pascal unit
    #include <SUIThemes.hpp>	// Pascal unit
    #include <SysUtils.hpp>	// Pascal unit
    #include <Graphics.hpp>	// Pascal unit
    #include <Dialogs.hpp>	// Pascal unit
    #include <Forms.hpp>	// Pascal unit
    #include <Math.hpp>	// Pascal unit
    #include <Classes.hpp>	// Pascal unit
    #include <Controls.hpp>	// Pascal unit
    #include <SysInit.hpp>	// Pascal unit
    #include <System.hpp>	// Pascal unit
     
    //-- user supplied -----------------------------------------------------------
     
    namespace Suidlg
    {
    //-- type declarations -------------------------------------------------------
    typedef Shortint TsuiDialogButtonsCount;
     
    #pragma option push -b-
     
     ICI ==>  enum TsuiIconType { suiNone, suiWarning, suiStop, suiInformation, suiHelp };
     
    #pragma option pop
     
      class DELPHICLASS TsuiDialog;
      class PASCALIMPLEMENTATION TsuiDialog:public  Classes::TComponent 
      {
        ...
      };
    ...
    }
    l'autre se trouve dans le fichier SUITitleBar.hpp

    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
     
    #ifndef SUITitleBarHPP
    #define SUITitleBarHPP
     
    #pragma delphiheader begin
    #pragma option push -w-
    #pragma option push -Vx
    #include <SUIPopupMenu.hpp>	// Pascal unit
    #include <SUIMgr.hpp>	// Pascal unit
    #include <SUIThemes.hpp>	// Pascal unit
    #include <SysUtils.hpp>	// Pascal unit
    #include <Dialogs.hpp>	// Pascal unit
    #include <ExtCtrls.hpp>	// Pascal unit
    #include <Menus.hpp>	// Pascal unit
    #include <Graphics.hpp>	// Pascal unit
    #include <Messages.hpp>	// Pascal unit
    #include <Forms.hpp>	// Pascal unit
    #include <Classes.hpp>	// Pascal unit
    #include <Controls.hpp>	// Pascal unit
    #include <Windows.hpp>	// Pascal unit
    #include <SysInit.hpp>	// Pascal unit
    #include <System.hpp>	// Pascal unit
     
    //-- user supplied -----------------------------------------------------------
     
    namespace Suititlebar
    {
    //-- type declarations -------------------------------------------------------
    typedef void __fastcall (__closure *TsuiTitleBarButtonClickEvent)(System::TObject* Sender, int ButtonIndex);
     
    #pragma option push -b-
     
      ICI  ==> enum TsuiTitleBarBtnType { suiMax, suiMin, suiClose, suiHelp, suiControlBox, suiCustom };
     
    #pragma option pop
     
      class DELPHICLASS TsuiTitleBarPopupMenu;
      class DELPHICLASS TsuiTitleBar;
      class DELPHICLASS TsuiTitleBarSections;
      class DELPHICLASS TsuiTitleBarSection;
      class PASCALIMPLEMENTATION TsuiTitleBarSections:public  Classes::TCollection 
      {
         ...
      };
    ....
    }

    A+ MERCI ENCORE A TOUS

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Tu n'a pas essayé avec leur namespace ?

    Suidlg::suiHelp

    A plus !

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    C'est bon j'ai trouvé trouvé tout seul ... enfin avec une sacré aide de HENDERSON

    Il a parlé de "namespace" et ma fois je ne savais meme pas que sa existait. J'ai fais des recherches et j'ai vu que l'enum dont jai besoin se situe dans "namespace suidlg".

    Pour supprimer tout conflit entre les deux enum il suffit juste de spécifier le namespace dans lequel se situe l'enum ou la fonction pour eviter un conflit.

    J'ai donc fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iMessageDialog->IconType = Suidlg::suiInformation
    et sa marche plus de conflits

    JE VOUS REMERCIE TOUS DE VOTRE AIDE, je REMERCIE TOUT PARTICULIEREMENT HENDERSON POUR M'AVOIR TANT AIDé ET GUIDER

  14. #14
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Merci henderson, l'utilisation de namespace est effectivement beaucoup plus élégant.

    Très souvent, s'agissant de dénominations arbitraires et de petits problèmes de compilation de ce genre, je n'ai pas le temps de chercher ce qui ne va pas dans mes propres développements d'où les réponses pragmatiques que je propose parfois. Mais il faut préférer une solution officielle comme celle-ci.

    À bientôt
    Gilles

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

Discussions similaires

  1. Erreur de connexion entre VS2005 et sql server
    Par popachubby dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/12/2006, 23h31
  2. Erreur de link entre dlls
    Par Spartan03 dans le forum C++
    Réponses: 1
    Dernier message: 16/08/2006, 19h48
  3. [VB6] Erreur 62 - L'entrée dépasse la fin de fichier
    Par Vesta dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/08/2006, 12h32
  4. Erreur d'include entre Jvcl et Excel_2k
    Par Djob dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/11/2005, 14h14
  5. DTS erreur pendant transfert entre 2 bases
    Par jc2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/11/2004, 15h31

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