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 :

type défini dans namespace non reconnu dans une classe du même namespace


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut type défini dans namespace non reconnu dans une classe du même namespace
    Bonjour à tous,

    j'utilise un namespace NS pour définir des types avec typedef, en particulier je définis un type map<double, double> que j'utilise dans le main.cpp pour remplir une variable globale de type ce type-là:

    fichier types.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace NS { 
     
    	typedef map<double,double> map_double ;
    }

    fichier main.cpp

    puis je la passe en paramètre au constructeur d'une classe A définie dans le A.cpp dans le même namespace NS.

    Mon problème c'est que dans A.cpp le compilateur ne reconnait pas le type map_double alors que je l'ai défini dans le même namespace, j'ai essayé de préfixé par NS:: mais ça ne marche pas ...
    SVP est-ce que quelqu'un voit à quoi ça correspond ?
    Merci beaucoup

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    As tu, tout simplement, inclus le fichier d'en-tête dans lequel tu as défini ton typedef as tu seulement effectivement défini ton typedef dans un fichier d'en-tête ( *.hpp ou *.h) et non dans un fichier d'implémentation (*.cpp )
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Salut,
    Oui c'est dans un fichier "types.hpp" dans lequel je définis tous mes types dans le namespace NS

    et dans A.cpp j'ai fait #include <types.hpp>

    Dans A.hpp quand j'essaie de déclarer un attribut de type map_double

    NS::map_double m_d_;

    j'ai l'erreur C2039: map_double n'est pas un membre de NS

    pour info je travaille avec Visual Studio 2008 et j'ai lu dans un forum sur le net qu'il fallait changer la configuration du projet pour permettre le Common Langage Runtime mais ça ne m'a pas aidé non plus

    seed_

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Ben, c'est normal... quand tu es dans l'espace de nom NS, tu n'as pas besoin de préciser l'espace de noms NS (ou, à contrario, tu dois préciser que tu pars de l'espace de noms commun sous la forme de ::NS::nom_du_type ), autrement, le compilateur va chercher, pour reprendre ton exemple, le type ... NS::NS::map_double ... qu'il ne trouvera évidemment pas

    Ce qu'il faut comprendre, c'est que, à partir du moment où les fichiers d'en-tête adéquats sont inclus, un espace de noms va agir un peu comme une boite en verre teinté :

    Elle permet, de l'intérieur, de voir tout ce qui se trouve dans la boite et tout ce qui se trouve en dehors, mais, de l'extérieur, il faut absolument ouvrir la boite pour voir ce qui se trouve à l'intérieur
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ok j'ai enlevé le préfixe NS:: donc maintenant c'est seulement

    map_double m_d;
    mais j'ai l'erreur suivante
    error C2146:syntax error: missing ';' before identifier 'm_d'

    ce qui est surprenant c'est que cette même déclaration marche dans le main.cpp. En fait dans le main je n'ai pas de problème à utiliser mes types du moment que je fais
    #include <types.hpp> et using namespace NS

    mais dès que j'essaie de faire la même chose dans A.cpp, j'ai l'erreur ci-dessus suivie de l'erreur C4430: missing type specifier

    une autre chose qui est bizarre c'est que quand j'essaie d'utiliser l'opérateur de résolution de portée :: , il me propose bien dans l'affichage tous mes types, mais à la compilation ça ne passe pas

    Merci d'avance pour l'aide

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Peut-être faut-il ajouter "using NS::map_double" quelque part ... ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Problème résolu !! tout ce que j'ai fait c'est
    using::NS::map_double dans le fichier A.cpp
    et la variable que je remplis dans le main.cpp je l'ai déclarée globale. Comme ça je n'ai qu'à la récupérer dans A.cpp et m'en servir sans même avoior à la passer en paramètre au constructeur de la classe A.

    voilà merci pour tes réponses Koala01

    A+

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Pourrais tu nous montrer le code de tes différents fichiers, car les variables globales, c'est rarement la bonne solution, mais, avec ce que tu nous donne, il nous faudrait notre boule de crystal, et pas de bol, elles sont en panne
    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

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

Discussions similaires

  1. copie d'une variable non reconnue dans une fonction
    Par paragoge dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/10/2009, 13h30
  2. Réponses: 7
    Dernier message: 15/05/2009, 23h13
  3. Type Text non reconnu dans Delphi
    Par dimi2 dans le forum Langage
    Réponses: 7
    Dernier message: 19/03/2008, 10h32
  4. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 17h43

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