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 :

Framework et erreurs de compilation


Sujet :

C++

  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 Framework et erreurs de compilation
    Bonjour,

    J'ai régulièrement des message d'erreur de compilation ambiguïté entre windows et word_2K::windows dans les fichiers de la bibliothèque C++
    Comment puis je résoudre ces problème sans toucher au framework?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par JeanNoel53 Voir le message
    Bonjour,

    J'ai régulièrement des message d'erreur de compilation ambiguïté entre windows et word_2K::windows dans les fichiers de la bibliothèque C++
    Comment puis je résoudre ces problème sans toucher au framework?
    Salut,

    De la manière la plus simple qui soit: en bannissant toute utilisation de la directive using namespace (donc, concrêtement, de la directive using namespace word_2k, sans doute )dans ton code, et, principalement, dans les fichiers d'en-tête (car ce point particulier est à considérer comme une erreur monumentale).

    Cela t'oblige, il est vrai, à utiliser systématiquement le terme word_2k::windows au lieu de windows, mais cela t'évitera tout risque d'ambiguité: windows s'appliquera à la classe qui ne vient pas de word_2k, et word_2k::windows s'appliquera... à lui-même
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  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 using namespace
    Bonjour
    Je retiens ton information
    J'ai beaucoup de directive
    mais pas -sous réserve de vérification..; en cours -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using namespace word_2k;
    il y en a aussi dans le frameword ( des std)

  4. #4
    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 namespace Word_2k
    Bonjour
    J'ai trouvé dans le framework
    mais pas d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using namespace Word_2k;

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Il faut, de manière générale, faire très attention aux directives using namespace...

    Déjà, je ne suis pas partisan de leur utilisation dans les fichiers d'implémentation, car elles ont pour résultat de "casser" le but recherché par l'utilisation des espaces de noms:

    En effet, les espaces de noms ont, justement, pour but de permettre que que chaque classe définie en leur sein soit identifiée de manière unique, et donc, au final, d'éviter les ambigüités lorsque, pour notre plus grand malheur, deux bibliothèques définissant une classe portant un nom identique, se retrouvent regroupé au sein d'un même fichier.

    Lorsque tu utilise la directive using namespace, tu indique d'utiliser ce qui se trouve à l'intérieur de cet espace de noms exactement comme si cela se trouvait dans l'espace de noms global.

    Si, du fait de la directive, tu te retrouve avec deux classes portant le même nom qui sont considérées comme se trouvant dans l'espace de noms globlal, tu te retrouve de nouveau face à l'ambigüité, et donc, face à l'obligation d'utiliser le nom "long".

    De plus, si tu utilises cette directive dans un fichier d'en-tête, elle va se répandre comme une trainée de poudre par le jeu des inclusions en cascades: si elle se trouve dans le fichier A.h, qui est inclus dans B.h, qui est lui-même inclus dans C.h qui, enfin, est inclus dans C.cpp, la directive sera utilisée de manière invisible pour le lecteur du code de C.cpp...

    Au final, je préfères bien souvent utiliser un alias d'espace de noms si, vraiment, le nom complet devient trop long à utiliser plutôt que la directive using namespace
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    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 using namespace std;
    Bonjour,
    J'ai donc retiré cette directive dans 55 fichiers....
    Mais j'ai toujours le résultat précédent
    3 erreurs de compilation windows::word_2k dans filectrl.hpp
    6 erreurs de compilation id° dans comctrls.hpp

  7. #7
    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 Une piste de solution
    Bonjour

    J'ai trouvé dans le code du driver word la directive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define WORDVER Word_2k
    qui était fait pour permettre de changer de version de word
    Cette requete n'accepte pas la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define WORDVER Word_2k::Windows
    J'ai donc, à titre d'essai supprimé la directive.
    Je suis revenu au 9 erreurs de compilation

  8. #8
    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 Driver Word en cause
    J'ai réussi à générer sans les errur dans le framework en retirant le driver word de la liste des fichiers d'include
    je copie le fichier pour illustrer le problème
    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
    91
    92
     
    /*******************************************************************************
     * NOM:  WordReader.h
     * ROLE: Read a bloc of text with MS WORD API
     * HISTORIQUE:
        * 05/05/2001, yab, initial version
    *******************************************************************************/
    #ifndef WORDREADER_H
    #define WORDREADER_H
    /*_____INCLUDE-FILES__________________________________________________________*/
     
     
    #include "Event.h"
    #include "Analyse.h"
    #include "StrConv.h"
    #include "Word_2K_SRVR.h"
    #include "Word_2k.h"
    #include "Office_2k.h"
    #pragma link "Word_2K_SRVR"
    #define WORDVER Word_2k
     
    /*_____CLASS-DEFINITION_______________________________________________________*/
     
     
    class CWReader
    {
     
    #define FIRST_PARAGRAPH_INDEX                                             1
    #define TRUE                                                              1
    #define FALSE                                                             0
    #define WORD_BOLD_TRUE                                                    -1
    #define WORD_BOLD_FALSE                                                   0
    #define WORD_ITALIC_TRUE                                                  -1
    #define WORD_ITALIC_FALSE                                                 0
     
    #define WIDE_CHARACTER_BELL                                               '\u0007'
    #define WIDE_CHARACTER_CARRIAGE_RETURN                                    '\u000D'
    #define WIDE_CHARACTER_SPACE				L" "
    #define WIDE_CHARACTER_BACK_SLASH_B			L"\b"
    #define WIDE_CHARACTER_BACK_SLASH_F			L"\f"
    #define WIDE_CHARACTER_BACK_SLASH_T			L"\t"
    #define WIDE_CHARACTER_BACK_SLASH_V			L"\v"
     
      enum CWordReaderMethods{
        START_WORD_API,
        STOP_WORD_API,
        OPEN_DOCUMENT,
        CLOSE_DOCUMENT,
        INITIALIZE_POINT_BLOC,
        GO_NEXT_BLOC,
        READ_BLOC,
        GET_LAYOUT_BLOC
      };
     
    private:
      TWordApplication *        m_pWordApplication;
      TWordDocument *           m_pWordDocument;
      WordDocumentPtr           m_pCurrentDocument;
      bool                               m_bDocumentIsOpen;
      Paragraphs *                       m_pAllParagraphs;
      long                               m_lNumberOfParagraphs;
      long                               m_IndexOfCurrentParagraph;
      Paragraph *               m_pCurrentParagraph;
      RangePtr                  m_pCurrentRange;
      std::wstring                       m_wsRangeText;
     
    public:
      CWReader* pWordReader;
      CWReader::CWReader();
      CWReader::~CWReader();
      erc StartWordApi();
      erc StopWordApi();
      erc OpenDocument(std::wstring wsFullPathName);
      erc CloseDocument();
      erc InitializePointBloc(bool & bIsTextEmpty);
      erc GoNextBloc(bool & bIsEndOfText);
      erc ReadBloc(CBloc *pBloc);
      erc GetLayoutBloc(CLayout *pLayoutBloc);
      void RemoveLastBadCharacter();
      void change_tofind_In_wstring_With_Space(std::wstring &wsString, std::wstring to_find);
     
    };
     
    //---------------------------------------------------------------------------
     
     
    /*_____GLOBAL-DEFINE__________________________________________________________*/
    /*_____GLOBAL-TYPES___________________________________________________________*/
    /*_____GLOBAL-DATA____________________________________________________________*/
    /*_____GLOBAL-MACROS__________________________________________________________*/
    /*_____GLOBAL-FUNCTIONS-PROTOTYPES____________________________________________*/
    #endif /* WORDREADER_H */
    le contre exemple reproduit les 9 erreurs de compilation dans le framework

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, il ne faut pas confondre namespace xxx { ... } et using namespace xxx; !
    J'espère que tu n'as supprimé que les seconds...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    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 using namespace std
    Bonjour,
    Oui effectivement j'ai retiré beaucoup d'using namespace std,mais aucun namespace xxx.
    et je ne touche pas aux framework
    Actuellement j'ai contourné ce pb en passant les déclarations qui posaient problême du h au cpp
    Je met résolue pour ne pas encombrer le forum, mais ce n'est qu'un pis aller.

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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