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

Visual C++ Discussion :

passage de borland à visual : pb avec la stl


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 118
    Par défaut passage de borland à visual : pb avec la stl
    Bonjour !

    Je découvre doucement visual, en essayant de transférer du code développé sous borland. Mais je me rends compte qu'ils ne gèrent pas la stl de la même manière. En effet, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<int,map<int,int>()> tab
    compile sous borland, mais pas sous visual.
    Je reçois l'erreur error C2974: 'map' : invalid template argument for '_Ty', type expected

    En testant sur un petit exemple, j'ai réussi à contourner le problème comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef map<int,int> mapintint;
    map<int,mapintint> tab;
    Le petit exemple compile et s'execute, mais cela ne me satisfait pas, car j'ai 50 warning juste pour ça, puis 50 en plus à chaque fois que j'utilise l'objet tab, et le temps de compilation est de fait extrêmement long, une dizaines de secondes pour moins de 5 lignes, donc sur un vrai projet... D'autre part, si je peux éviter de devoir trop modifier mon code d'origine et rajouter plein de typedef partout, je préfèrerais !

    J'ai aussi testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<int,map<int,int>> tab;
    ce qui me donne l'erreur
    error C2146: syntax error : missing ',' before identifier 'tab'

    Si quelqu'un a la moindre idée ou explication, je suis prenneur !

    Pour info, il s'agit de visual c++ 6, sous windows xp pro sp2.

    Merci d'avance !

  2. #2
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<int,map<int,int>()> tab
    je pige pas les parentheses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<int,map<int,int>> tab;
    il faut mettre un espace entre les 2 "supérieurs" sinon le compilateur le voit comme un décalage binaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map<int,map<int,int> > tab;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 118
    Par défaut
    Merci !
    Effectivement, avec l'espace, ça compile, mais c'est toujours lent, et ça me met des warning par paquets de 50.
    Petit extrait :
    d:\program files\microsoft visual studio\vc98\include\xtree(120) : warning C4786: 'std::_Tree<int,std::pair<int const ,std::map<int,int,std::less<int>,std::allocator<int> > >,std::map<int,std::map<int,int,std::less<int>,std::allocator<int> >,std::le
    ss<int>,std::allocator<std::map<int,int,std::less<int>,std::allocator<int> > > >::_Kfn,std::less<int>,std::allocator<std::map<int,int,std::less<int>,std::allocator<int> > > >' : identifier was truncated to '255' characters in the debug information
    d:\program files\microsoft visual studio\vc98\include\map(46) : see reference to class template instantiation 'std::_Tree<int,std::pair<int const ,std::map<int,int,std::less<int>,std::allocator<int> > >,std::map<int,std::map<int,int,std::les
    s<int>,std::allocator<int> >,std::less<int>,std::allocator<std::map<int,int,std::less<int>,std::allocator<int> > > >::_Kfn,std::less<int>,std::allocator<std::map<int,int,std::less<int>,std::allocator<int> > > >' being compiled
    I:\Mes Documents\Developpement\test_compil\test_compil.cpp(16) : see reference to class template instantiation 'std::map<int,std::map<int,int,std::less<int>,std::allocator<int> >,std::less<int>,std::allocator<std::map<int,int,std::less<int>,
    std::allocator<int> > > >' being compiled
    Les parenthèses, je les avaient mises sous borland après que le compilo m'a dit ne pas connaitre de constructeur vide pour map<int,int> (dans la ligne map<int,map<int,int>>). Avec les parenthèses, ça lui plaisait bien, même pas un warning.

    Et juste pour ma culture, dans une optique C++ "standard_qui_respecte_la_norme_officielle_c'est_quoi_son_nom_déjà", lequel des 2 compilo a raison ?

  4. #4
    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
    C'est Borland qui a tort, puisqu'aucun appel de constructeur n'est fait à ce moment-là, de plus map<int, int> devrait avoir un constructeur par défaut.

    Quant aux warnings, ce ne sont que des Warnings de Visual 6 qui disent que les noms de templates, c'est un peu long pour rentrer dans ses infos de débogage (car ça fait plus de 255 caractères), mais ça n'a aucune influence sur le code produit en lui-même.
    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.

  5. #5
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    pour enlever le warning il faut tu rajoutes le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     #pragma warning(disable: 4786)
    en entete

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 118
    Par défaut
    Merci pour toutes ces explications !
    Ca marche nickel maintenant !

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

Discussions similaires

  1. Grosse différence de perf en GCC et Visual avec les STL
    Par vanitom dans le forum Visual C++
    Réponses: 4
    Dernier message: 28/04/2009, 09h35
  2. [Migration] Borland -> Visual
    Par 10_GOTO_10 dans le forum MFC
    Réponses: 24
    Dernier message: 01/12/2004, 15h45
  3. Arbre binaire avec la STL ?
    Par SteelBox dans le forum SL & STL
    Réponses: 9
    Dernier message: 10/11/2004, 13h22
  4. Pb passage programme linux->visual C++
    Par StephP dans le forum MFC
    Réponses: 3
    Dernier message: 16/01/2004, 12h56
  5. [Kylix] [BCB] pb avec la STL
    Par pykoon dans le forum EDI
    Réponses: 1
    Dernier message: 29/12/2002, 12h56

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