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

MFC Discussion :

[C++ .net 2003] retourner une variable de type std::map


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 16
    Points : 12
    Points
    12
    Par défaut [C++ .net 2003] retourner une variable de type std::map
    Bonjour a tous,

    Je developpe une DLL qui lit une BDD et me retourne un tableau contenant toute ma table.

    J'utilise un std::map<identifiant, strcuture_de_ma_table> qui va contenir tous les enregistrements contenus dans ma table.

    Mon probleme consiste dans le return. Des que je fais un return d'une variable de type std::map j'ai des erreurs de compilation.

    dans mon fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ma_classe
    {
        __declspec(dllexport) std::map<CString, strcuture_de_ma_table> foo();    
    }
    dans mon fichier .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
     
    {
        std::map ma_classe::foo()
            {
            std::map<CString, CString> mMap;
     
            mMap["0"] = "valeur 1";
            mMap["1"] = "valeur 2";
            mMap["2"] = "valeur 3";
     
            return mMap;
            }
     
    }
    Dans mon fichier .cpp je ne peu pas declarer la fonction foo comme ca
    std::map<CString, CString> ma_classe::foo(), car la il considere 'foo' comme ue variable.


    Voila je suis un peu perdu face a ce probleme, je trouve rien sur le net...
    Ce forum est mon seul espoir

    merci d'avance a tous ceux qui se seront penches dessus.

  2. #2
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    ne serait ce pas plus simple de passer par un variable que tu fournis en parametre par référence ?

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MyEnumPorts(std::vector<std::string>&);

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    Tu retournes un objet temporaire, et la map n'a pas de constructeur de copie
    d'ou l'erreur que tu dois avoir à la compilation.
    (Erreur que tu ne nous as pas donnée....)

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Desole pour les balises code ....
    Desole de repondre tard, j'etais pas devant mon pc .... (tu parle d'une fausse excuse ....)

    pour etre plus precis, j'utilise cette fonction dans une DLL.
    J'utilise -- extern "C" -- pour exporter ma fonction. Je pense que le pb vient de la ....

    l'erreur que j'ai "C Linkage function cannot return C++ class std::map<...> "

    PS : Le passer en parametre est une solution qui se tient. MERCI.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Desole je me suis plante dans le copier/coller, dans mon .h, j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" std::map<CString, strcuture_de_ma_table> PASCAL EXPORT foo();
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     __declspec(dllexport) std::map<CString, strcuture_de_ma_table> foo();

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    le PB venait bien de la, il faut utiliser le modificateur "__declspec(dllexport)" pour exporter sa (ou ses) fonctions C++.

    Car si j'ai bien compris avec le modificateur EXTERN "C", les fonctions seront compilées par un compilateur C! Donc tout ce qui est propre au CPP genre STL ca devarit pas passer.

    Mais dans ce cas je ne comprends pas comment ca se fait qu'il reconnaisse les pointeurs, CString etc ....


    Merci pour vos eclaircissements.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    extern "C" c'est uniquement pour donner la compatilité C, pas pour l'export de la fonction.
    donc c'est normale que ça ne fonctionne pas .

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/01/2010, 17h28
  2. Réponses: 13
    Dernier message: 08/03/2007, 14h53
  3. Réponses: 5
    Dernier message: 19/11/2006, 11h39
  4. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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