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 :

Compilateur rajoutant automatiquement un namespace


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Compilateur rajoutant automatiquement un namespace
    Bonjour,

    Je suis en train de programmer un logiciel assez complexe et j'utilise beaucoup de namespace pour le segmenter, notamment pour toutes les énumérations. Cependant, je viens de me rendre compte que j'avais oublié un namespace avant le nom d'une fonction et que mon compilateur ne m'a pas reprit, qu'il a de lui-même retrouvé la fonction en question et continué comme si de rien n'était.
    Or ce n'est pas ce que je veux, je veux au contraire qu'il me prévienne si j'ai oublié un namespace, même quand il n'y a pas d’ambiguïté.
    Quand j'essaye d'utiliser la classe string sans le std, il râle, je voudrais bien qu'il fasse pareil pour mes namespaces.

    L'exemple en question, définition de la fonction:
    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
    #ifndef FIGHTINGSIDE_H_INCLUDED
    #define FIGHTINGSIDE_H_INCLUDED
     
    struct lua_State;
     
    namespace EFightingSide
    {
        enum Type
        {
            Player = 0,
            Allies,
            Ennemies,
            Monster,
            Neutral,
     
            Length
        };
     
        bool IsAlly(Type team1, Type team2);
        const char* ToString(Type team);
     
        int IsAlly(lua_State* L);
    }
     
    #endif // FIGHTINGSIDE_H_INCLUDED
    Utilisation de la fonction (au milieu d'un gros tas de code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /** tas de code **/
    if(isBerserk && IsAlly(info.UnitInfo->Team, info.TargetInfo->Team))
    /** tas de code **/
    J'ai vérifié, il n'y a aucun "using namespace EFightingSide" dans mon code et pas d'autre fonction "IsAlly".

    J'utilise MinGW 4.6.2, Code::Blocks et Windows Seven 64.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 205
    Points : 12 374
    Points
    12 374
    Par défaut
    1. Vous êtes dans un forum C++/CLI donc MinGW ce n'est pas trop l'outil de prédilection de la faune environnante.

    2. On peut dire beaucoup de chose des compilateurs sauf qu'ils soient serviables. S'ils ne vous engueulent pas c'est qu'ils n'ont pas à la faire.
    Soit vous lui avez dit de la fermer même involontairement, soit que vous n'avez pas très bien compris comment marche la résolution du nom C++. Comme vous n'indiquez pas le namespace du code utilisant la fonction et que c'est important, je pense qu'une petite révision s'impose.
    http://www.codeproject.com/Articles/...kup-a-C-primer

    3.
    J'ai vérifié, il n'y a aucun "using namespace EFightingSide" dans mon code et pas d'autre fonction "IsAlly".
    La seule vraie vérification de ce genre d'assertion, c'est avec le résultat du pré-processing car la moindre constante de compilation, include foireux ou MACRO à la con, peuvent vous mettre dans la déche.

    je ne sais pas comment on fait pour avoir le résultat du pré-processing avec MinGW, mais avec VS, on ajoute "/P" aux options de compilation.
    http://msdn.microsoft.com/fr-fr/libr...v=vs.100).aspx

    Et arrêtez de croire au Père Noël, c'est vous qui, directement ou indirectement, avez demandé au compilateur de la fermé.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par bacelar Voir le message
    1. Vous êtes dans un forum C++/CLI donc MinGW ce n'est pas trop l'outil de prédilection de la faune environnante.
    Effectivement, erreur de navigation de ma part. Il semblerait que je n'ai pas le moyen de le déplacer dans le forum général C++ mais si quelqu'un avec ce pouvoir veut le faire, qu'il ne se gène pas.

    Quant à mon problème, la réponse est effectivement le Koenig Lookup dont parle votre lien: puisque les arguments de ma fonction sont des EFightingSide::Type, le compilateur inclut EFightingSide dans la liste des namespace à chercher pour trouver la fonction.

    Je n'avais jamais entendu parler de ça (et je trouve ce concept un peu troublant, mais bon), mais maintenant je le saurais.

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

Discussions similaires

  1. Rajout automatique d'un /
    Par startlm dans le forum Apache
    Réponses: 3
    Dernier message: 29/02/2012, 20h39
  2. Réponses: 4
    Dernier message: 15/08/2010, 01h01
  3. [XSLT : ELEMENT] déclaration automatique de namespace
    Par 7eme dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/07/2007, 10h57
  4. [Jboss][Log4j] Rajouter des regles automatiquement
    Par Hikage dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 12/04/2006, 20h04
  5. [Utile]Rajout automatique dans input et verif date
    Par matpal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/11/2004, 17h36

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