map iterator linux win caos
-
Hallo zusammen,
da definiert sich in einem Windows Programm eine std::map
std::map<std::string , std::string> m_params;
und wird im weiteren schon immer so ausgelsen :
for (std::vector<std::string>::const_iterator i = m_params.begin(); i != m_params.end(); i++) puts((i)->c_str());
Unter Linux Gcc kommen lange Fehlermelden, zwar kompiliert gcc diese Version:
for ( std::map<std::string , std::string>::const_iterator i = m_params.begin(); i != m_params.end(); i++) ;
Kann dann aber auf das Objekt c_str() über (i)->c_str() nicht mehr zugreifen, obschon auch dort dieses in der Erweiterung der refrenzliste wie unter Windows anklickbar/aus wählbar ist:
Danke für Hinweise wie ich über (i)-> wieder zum c_str komme...
Grüße aus Preußen
K.
-
Schau dir mal die "Member types" in std::map an.
Der 'iterator' (bzw. 'const_iterator') bezieht sich immer auf den 'value_type' und dieser ist bei einer std::map 'pair<const key_type,mapped_type>', so daß du per
i->first // Zugriff auf key // oder i->second // Zugriff auf value
erhältst.
Und gerade durch die Standardisierung soll es ja eben eine einheitliche Syntax beim Zugriff auf die C++ Standard Library Klassen und Funktionen geben. Benutzt du evtl. zu alte Compiler?
PS: Was soll das für ein Programm (bzw. Compiler) sein, welches bei einer std::map den Zugriff per std::vector<T>::iterator erlaubt?
-
Danke für deinen Beitrag, genau ! Das ist map, aus irgend welchen Gründen
habe ich hier alte Header eingesetzt die noch auf Map waren und im cpp list.Sorry Fehlpost.. war schon zu früh ...
Grüße
Karsten