2013-06-17 3 views
0

Je suis en train de compiler une application C++ sur le serveur SUN en utilisant le compilateur Sun C++ 5.9 SunOS_sparc Patch 124863-01.I reçois le erreur ci-dessous lors de la compilationErreur: Impossible de trouver un match pour std :: multimap

Error: Could not find a match for std::multimap<std::string, OutputNamespace::FUPInfo, std::less<std::string>, std::allocator<std::pair<const std::string, OutputNamespace::FUPInfo>>>::insert(std::pair<std::string, OutputNamespace::FUPInfo>) needed in operator<<(std::ostream &, InvoiceOutput&). 

Est-ce un problème lié au compilateur? Avez-vous une idée de la façon de le résoudre? Merci à l'avance

Cordialement

+0

ce qui signifie que ce code ne sera pas compilé? Y at-il une solution de contournement pour éviter ce bug? ou un patch peut-être? J'ai lu sur Internet que cela peut être évité en utilisant le flag -library = stlport4 mais en fait je ne sais pas quel impact cela aura sur l'application, pouvez-vous me conseiller à ce sujet? Merci – jamel

Répondre

3

Ceci est un défaut dans le compilateur Sun pour maintenir la compatibilité ascendante ABI avec sa bibliothèque standard d'origine (qui ne dispose pas de très nombreuses fonctionnalités). Il souhaite que la paire insert soit le type de valeur interne de la carte (avec const) ajouté à la clé, plutôt que le réel type de clé que vous avez demandé dans la déclaration multimap. Par exemple, le suivant compile:

#include <map> 
#include <string> 

int main() 
{ 
    std::multimap<std::string, int> mapperizer; 

    mapperizer.insert(std::pair<const std::string, int>(std::string("Foo"), 42)); 
} 

En outre, la version originale compilera avec succès stlport4 (argument de ligne de commande -library=stlport4).

Questions connexes