STLPort funktioniert nicht richtig



  • Hallo,

    ein Programm von mir funktioniert nicht, andere Konsolenprojekte laufen unter STLPort aber.
    Die Fehler sind jetzt aber leider keine normalen Fehler zu meinen Dateien, sondern sie kritisieren STLPort selber:

    --------------------Konfiguration: IRC Bot - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    f:\stlport-4.6\stlport\stl\_tree.h(487) : error C2662: '()' : this-Zeiger kann nicht von 'const struct compLen' in 'struct compLen &' konvertiert werden
            Durch die Konvertierung gehen Qualifizierer verloren
            f:\stlport-4.6\stlport\stl\_tree.h(482) : Bei der Kompilierung der Member-Funktion 'struct _STL::_Rb_tree_node<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const ,class _STL::bas
    ic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > > *__thiscall _STL::_Rb_tree<class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> >,struct _STL::pair<class _STL::basic_string<char,class
     _STL::char_traits<char>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > >,struct _STL::_Select1st<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits
    <char>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > >,struct compLen,class _STL::allocator<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits<ch
    ar>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > > >::_M_lower_bound(const class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > 
    &) const' der Klassenvorlage
    f:\stlport-4.6\stlport\stl\_tree.h(487) : error C2064: Ausdruck ergibt keine Funktion
            f:\stlport-4.6\stlport\stl\_tree.h(482) : Bei der Kompilierung der Member-Funktion 'struct _STL::_Rb_tree_node<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const ,class _STL::bas
    ic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > > *__thiscall _STL::_Rb_tree<class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> >,struct _STL::pair<class _STL::basic_string<char,class
     _STL::char_traits<char>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > >,struct _STL::_Select1st<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits
    <char>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > >,struct compLen,class _STL::allocator<struct _STL::pair<class _STL::basic_string<char,class _STL::char_traits<ch
    ar>,class _STL::allocator<char> > const ,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > > > >::_M_lower_bound(const class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > 
    &) const' der Klassenvorlage
    Fehler beim Ausführen von cl.exe.
    
    IRC Bot.exe - 2 Fehler, 0 Warnung(en)
    

    Was soll man da machen? 😞

    MfG MAV



  • Da STLPort vermutlich nicht der Grund fuer den Fehler ist, waere es interessant zu wissen welcher Code von dir den Fehler provoziert.



  • Nun, das Projekt ist größer, hat vorher funktioniert (jedenfalls syntaktisch) und ich habe es nur auf STL Port umgestellt.
    Folglich weiß ich nicht, welcche Codestelle deisen Fehler verursacht. 😞

    EDIT:
    Oh, durch Zufall habe ich die Ursache gefunden:

    typedef std::map<std::string, std::string, compLen> varMap;
    

    Lasse ich compLen weg, so funktioniert es, mit zwar einigen Warnungen, aber ansosnten ohne Probleme.
    Leider ist das ja jetzt nötig, weil ich die varMap ja selber sortiert haben will, der Funktor:

    struct compLen
    {
    	bool operator()(const std::string& a, const std::string& b)
    	{
    		return a.length() < b.length();
    	}
    };
    

    Okay, also hier sind die INfos.

    MfG MAV



  • Mis2com schrieb:

    struct compLen
    {
    	bool operator()(const std::string& a, const std::string& b)
    	{
    		return a.length() < b.length();
    	}
    };
    

    Na also. Das ist ziemlich sicher der Fehler.

    bool operator()(const std::string& a, const std::string& b) const
    

    muss das heißen.



  • Exakt, es funtkioniert nun. 🙂
    Vielen Dank!

    Da der Thread sonst keine Bedeutung mehr hat, würde ich jetzt gerne noch wissen, was so ein Funktor ist, das sieht aus wie Operator(), der überladen wurde, aber wie greift man überhaupt mit () zu, wenn es keine Funktion ist?

    MfG MAV



  • Ein Funktor ist ein Objekt, das aussieht und sich verhält wie eine Funktion. Praktisch ist ein Funktor eine Instanz einer Klasse, die operator() für sich überladen hat. Der Compiler wandelt dann

    Foo f;
    f(7, 2);
    

    quasi um in

    Foo f;
    f.operator() (7, 2);
    

    Im Gegensatz zu Funktionen haben Funktoren den Vorteil, dass man ihnen Daten mitgeben kann und sie damit flexibler sind. Informier dich mal über die STL (und boost).


Anmelden zum Antworten