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


Log in to reply