std::string - = = - operator funktioniert nicht

Habe ich mit std::string s = = - operator seit Jahren auf windows und linux. Jetzt bin ich kompilieren einer meiner Bibliotheken auf linux, verwendet == stark. Auf linux in der folgenden Funktion schlägt fehl, weil die == gibt false zurück, selbst wenn die strings gleich sind (case Sensitiv Weise gleich)

const Data* DataBase::getDataByName( const std::string& name ) const
{
         for ( unsigned int i = 0 ; i < m_dataList.getNum() ; i++ )
         {
                if (  m_dataList.get(i)->getName() == name )
                {
                         return  m_dataList.get(i);
                }
         }

         return NULL;
}

Die getName () - Methode ist wie folgt deklariert

virtual const std::string& getName() const;

Baue ich mit gcc 4.4.1 und libstdc++44-4.4.1.

Irgendwelche Ideen? es sieht vollkommen gültig zu mir.

Paul

  • nur eine kurze Anmerkung: std::string tmpStr1 = name; std::string tmpStr2 = m_dataList.get(i)->getName() ; if ( tmpStr1 == tmpStr2 ) ... Das funktioniert bestens, wie erwartet.
  • getName liefert eine Referenz. Ist der Verweis noch gültig?
  • Imposable zu sagen, was falsch ist mit dem angegebenen code. Der Fehler woanders liegt. Was ist der code für die Daten::getName(). Ein weiterer posability ist, dass Sie überschrieb die operator==() versehentlich haben Sie versucht, betreten es, um sicherzustellen, dass Sie die standard-Implementierung?
  • bitte fügen Sie einer Antwort, die weiter auf Ihren Kommentar ein. Es ist wahrscheinlich die richtige Antwort, aber andere können es nicht sehen, mit ein Beispiel.
  • Ich denke, dass Paul ' s Kommentar-Regeln aus einfachen, veralteten Verweise. Vergleich der Kopien der Objekte sollten die gleiche Arbeit im Vergleich zu den Objekten. Das klingt wie eine Art compiler oder library-Fehler. Mein Rat wäre, so aktivieren Sie den Debugger, versuchen zu reproduzieren, und single-step durch die Bibliothek, wenn so. Wenn nicht, setzen Sie auf ein paar Handschuhe, und versuchen Sie aufzuspüren, welche Optimierung den es auslöst.
  • Tut !strcmp(m_dataList.get(i)->getName().c_str(), Namen.c_str()) == 0 arbeiten?
  • Tut dies immer fehlschlagen, oder nur zeitweise? Scheitert es mit bestimmten sub-Klassen von der Art, dass Ihre virtuelle getName() definiert?

InformationsquelleAutor Paul | 2010-05-11
Schreibe einen Kommentar