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 :

Visual C++ 2008 et std::vector.push_back - erreur au linkage


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut Visual C++ 2008 et std::vector.push_back - erreur au linkage
    Bonjour,

    Je suis actuellement en train de développer une appli sur Visual C++ 2008. Je suis en mode debug, avec mon projet configuré en /MD (dll multithreadée).

    J'ai une classe questionManager, qui a notamment un attribut privé musicQuestions qui est de type std::vector<questionResource>.

    questionResource est une classe, dérivée de la classe question.

    Dans l'une des méthodes de questionManager, j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    questionResource obj(difficulty, resource, answer);
    this->musicQuestions.push_back(obj);
    Et à la compilation, Visual Studio me sort l'erreur suivante:

    Error 1 error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: __thiscall std::_Vector_const_iterator<class questionResource,class std::allocator<class questionResource> >::_Vector_const_iterator<class questionResource,class std::allocator<class questionResource> >(class questionResource *,class std::_Container_base_secure const *)" (??0?$_Vector_const_iterator@VquestionResource@@V?$allocator@VquestionResource@@@std@@@std@@QAE@PAVquestionResource@@PBV_Container_base_secure@1@@Z) questionManager.obj GeeQuiz
    Insérer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <vector>
    using namespace std;
    au début de mon fichier ne change rien.

    Que faire? Je suis quasi sûr que le problème ne vient pas de définition de classes ou autre, puisque si je commente la ligne avec le push_back(), mon code se compile et s'éxécute convenablement.

    J'ai essayé de rajouter

    D'avance merci,

    Guillaume A.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    En continuant à bidouiller, j'ai réalisé la chose suivante:

    Si je mets mon projet en "Multi-threaded Debug DLL (/MDd)", alors je n'ai plus qu'un seul warning à la compilation:

    Warning 1 warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library MSVCRTD.lib GeeQuiz
    Je n'y comprends plus rien...

  3. #3
    screetch
    Invité(e)
    Par défaut
    problemes de link car tu as probablement bidouillé un peu le projet visual studio

    si tu es en mode /MD (dll multithreadée) il faut verifier que la macro _DEBUG n'est pas définie

    les macros sont les suivantes :
    /MD : _DLL
    /MDd : _DLL, _DEBUG
    /MT (je crois, la version statique en tous cas) : rien
    /MTd : _DEBUG
    (plus le win32 tralala qui ne concerne pas la STL)

    pour la deuxieme erreur (ou le warning) tu compiles sans doute en utilisant une bibliotheque externe qui a été compilée avec un autre visual studio. Il faut que tous tes modules utilisent la meme version de visual studio et les memes flags (/MT, /MD, etc) pour etre compatibles, sinon tu risques d'avoir quelques problèmes assez durs a comprendre. Quelles sont les bibliotheques externes que tu utilises ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    J'utilises FMOD et la SDL (ainsi que SDL_image et SDL_ttf).

    Cela dit je ne comprends pas, car tu me dis qu'il faut que la macro _DEBUG ne soit pas définie.

    Or mon projet ne compile pas en /MD (donc macro non définie) mais compile en /MDd (donc avec la macro définie), bien qu'avec un warning.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    Bon, je viens de mettre mon projet en /MDd, et pour résoudre le warning, je lui ai dit d'ignorer msvcrt dans Properties > Linker > Input > Ignore Specific Library.

    Tout marche pour le moment, j'espère que ça restera comme ça...

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Déjà eu la farce aussi, aucun moyen de résoudre l'erreur de link sans bidouiller les options du linker et mettre un "/force:multiple" (ce qui est MAAAAL...).

    Donc, j'ai résolu le problème autrement : j'ai viré le std::vector de mon code.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    C'est à dire? Tu l'as utilisé par un moyen détourné ou tu n'as carrément pas eu recours à la STL? (ce qui avouons le, est assez casse pieds)

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par gardaud Voir le message
    C'est à dire? Tu l'as utilisé par un moyen détourné ou tu n'as carrément pas eu recours à la STL? (ce qui avouons le, est assez casse pieds)
    J'ai viré la STL, c'était dix fois plus rapide que de contourner... La STL est là pour te faire gagner du temps de développement (au détriment, parfois, d'un peu de performances). Si elle t'en fait perdre, elle ne sert plus à rien.

    Sur ce cas précis, j'ai viré le std::vector sur cette partie de code, mais j'ai conservé les autres conteneurs dans le reste du code, vu qu'ils ne posaient pas de problèmes.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    screetch
    Invité(e)
    Par défaut
    je viens de me rappeler que /MT et /MD (non debug) doivent definir la macro NDEBUG

    verifie que dans ton projet cette macro est bien définie lorsque tu utilises /MD ou /MT

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2012, 12h31
  2. Probleme avec std::vector push_back
    Par raphchar dans le forum C++
    Réponses: 4
    Dernier message: 19/12/2011, 14h18
  3. Push_back() de std::vector
    Par tir0nik dans le forum SL & STL
    Réponses: 10
    Dernier message: 03/05/2009, 19h26
  4. Réponses: 5
    Dernier message: 11/03/2009, 17h17
  5. std ::vector [erreur que je ne comprend pas]
    Par aaronw dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/03/2006, 21h00

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