Container mit Zeigern und STL-Funktionstemplates



  • Luca76 schrieb:

    Was ist jetzt noch falsch?

    Dein Compiler. Der ist leider nicht ganz richtig in der Birne und in diesem Punkt meilenweit vom Standard entfernt.

    In diesem Fall bleiben dir nur zwei Möglichkeiten:
    1. Du gehst den Umweg über ein zusätzliches Funktionsobjekt (siehe Beispiel)
    2. Du spendierst deiner print-Methode einen Rückgabewert und machsts sie non-const.



  • Visual C++ 6 habe ich. 😉



  • Dein Compiler. Der ist leider nicht ganz richtig in der Birne und in diesem Punkt meilenweit vom Standard entfernt.

    😃 😃 😃
    manno bin ich froooooooooo
    dass ich

    Visual C++ 6

    nicht mehr hab

    😃 😃 😃



  • Luca76 schrieb:

    Visual C++ 6 habe ich. 😉

    man erkennt die qualität von C++ büchern daran, ob auf der cd ne autoren version von Vc6 ist^^



  • Luca76 schrieb:

    Visual C++ 6 habe ich. 😉

    Wenn's dich beruhigt, ich benutze ebenfalls hauptsächlich diesen Compiler 😉
    Was du als drittes machen könntest, wäre auf eine andere STL-Implementation umzusteigen. STLPort ist z.B. ganz schön.
    Als Übergangslösung würde ich auf jeden Fall die Variante mit dem zusätzlichen Funktionsobjekt verwenden.



  • Danke! 😉
    Habe STLport heruntergeladen, installiert und es funktioniert jetzt auch.



  • Wenn's dich beruhigt, ich benutze ebenfalls hauptsächlich diesen Compiler

    Darf man fragen wieso? Verwendet ihr den bei euch an der Uni?



  • Helium schrieb:

    Wenn's dich beruhigt, ich benutze ebenfalls hauptsächlich diesen Compiler

    Darf man fragen wieso? Verwendet ihr den bei euch an der Uni?

    Ja und nein. In unserem Informatikbereich wird hauptsächlich SunOS und Linux eingesetzt, demzufolge wird dort der gcc verwendet. Am HPI (Softwaresystemtechnik) wird hingegen eigentlich immer das neuste von Microsoft benutzt, sprich derzeit hauptsächlich Visual Studio .Net.

    Das ich den VC 6.0 benutze hat drei entscheidene Gründe:
    1. Ich bin Windows-Benutzer (komme mit Linux nach wie vor nicht zurecht).
    2. Ich habe nach wie vor Windows98 installiert, kann also die Ganze .NET-Geschichten nicht so ohne weiteres einsetzen.
    3. Die IDE des VC 6.0 (ergänzt um einige Plugins) ist meiner Meinung nach nach wie vor herausragend. Unter Berücksichtigung von 1. und 2. habe ich bisher nichts vergleichbares gesehen.

    Ich habe natürlich auch andere Compiler auf dem Rechner installiert (Win-Version des gcc, Cygwin + gcc sowie auch ein Linux mit immer aktuellem gcc), so dass ich auch mal problemlos mit Templates rumspielen kann. Für die normale Arbeit verwende ich aber immer den VC 6.0



  • So, ich wollte es jetzt auch mal so ausprobieren, dass ein Parameter übergeben werden kann.

    class Object {
    public:
        void print( const std::string& msg ) {
            std::cout << msg;
        }
    };
    
    int main( int argc, char *argv[] ) {
    
        std::list<Object*> objectList;
        std::string msg( "Ausgabe" );
    
        std::for_each( objectList.begin(), objectList.end(), std::bind2nd( std::mem_fun(&Object::print), msg ) );
        return 0;
    }
    

    Beim Compilieren kommt dann der Fehler:
    \stlport-4.6.2\stlport\stl\_function.h(166) : warning C4181: Auf Referenztyp angewendeter Qualifizierer wird ignoriert
    \Test_Project\src\main.cpp(52) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage '_STL::binder2nd<class _STL::mem_fun1_t<void,class Object,class _STL::basic_string<char,s
    truct std::char_traits<char>,class _STL::allocator<char> > const &> >'
    \stlport-4.6.2\stlport\stl\_function.h(165) : error C2529: '<unbekannt>' : Verweis auf Verweis ungueltig
    \Test_Project\src\main.cpp(52) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage '_STL::binder2nd<class _STL::mem_fun1_t<void,class Object,class _STL::basic_string<char,s
    truct std::char_traits<char>,class _STL::allocator<char> > const &> >'

    Kann man eigentlich auch 2 Parameter übergeben?



  • Hallo,
    dieses Referenz-auf-Referenz-Problem ist eine bekannte Schwäche für die es leider innerhalb der STL keine schöne Lösung gibt. Dazu müsste man Traits-Verwenden, was in der STL bisher leider nicht vorgesehen ist.

    Entweder du steigst auf sowas wie boost::bind um oder du musst den Parameter by value übergeben.



  • HumeSikkins schrieb:

    Hallo,
    Entweder du steigst auf sowas wie boost::bind um oder du musst den Parameter by value übergeben.

    Und, wie würde es dann aussehen?


Anmelden zum Antworten