Visual C++ 6.0

  • grias ench!

    folgende frage an alle c++ gurus.. ich glaub aber, dass es eher was mitm visual studio zu tun hat..

    eine einfache klasse, die sich selbst verwalten soll:



    die quelldatei dazu kompiliert ohne probleme.. aber wenn ich zum linken komm, bekomm ich folgende fehlermeldung:

    Code
    Linker-Vorgang läuft...
    Object.obj : error LNK2001: Nichtaufgeloestes externes Symbol "private: static class std::list<class Object *,class std::allocator<class Object *> > Object::liveObjects" (?liveObjects@Object@@0V?$list@PAVObject@@V?$allocator@PAVObject@@@std@@@std@@A
    )
    Object.obj : error LNK2001: Nichtaufgeloestes externes Symbol "private: static class std::list<class Object *,class std::allocator<class Object *> > Object::deadObjects" (?deadObjects@Object@@0V?$list@PAVObject@@V?$allocator@PAVObject@@@std@@@std@@A
    )
    Debug/engine.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.



    und ich hab keine ahnung warum.. kann es sein, dass ich irgendwelche linker-optionen ändern muss, wenn ich die stl verwenden will?

    ich würd mich über hilfreiche tips freuen!

    F

    PS: ich lad grad service pack 5 runter.. vielleicht gehts ja dann..

    nur ein mac ist ein mac ist ein mac ist ein....

  • Das hat eigentlich nix mitm Visual Studio zu tun, sondern eher mit C++. Würd mich wundern wenn das mit nem anderem Compiler kompilieren würde. Aber vielleicht würde ein anderer zumindest irgendwo ne Warning ausgeben. Das Problem: Statische Membervariablen, wie bei dir liveObjects und deadObjects müssen irgendwo initialisiert werden. Am besten machst du das in irgendeiner .Cpp datei, ausserhalb einer Funktion oder Methode.

  • danke für die antwort!

    eine quellcodedatei hab ich dazu natürlich auch:



    Zitat von Irrlicht


    Das Problem: Statische Membervariablen, wie bei dir liveObjects und deadObjects müssen irgendwo initialisiert werden. Am besten machst du das in irgendeiner .Cpp datei, ausserhalb einer Funktion oder Methode.


    ich nehm an, du meinst sowas wie

    Code
    Object::liveObjects = 0;


    wenns a zahl wär..

    wie funktioniert das bei stl?

    F

    nur ein mac ist ein mac ist ein mac ist ein....

  • Zitat von thurin


    wie funktioniert das bei stl?

    Hat auch nichts mit der STL zu tun, bei irgendwelchen anderen statischen Klassen ist es genauso.

    Ein einfaches

    Code
    std::list< Object* > Object::liveObjects;
    std::list< Object* > Object::deadObjects;


    sollte reichen. Was programmierst du denn da schönes? :)

  • Zitat von Irrlicht

    Hat auch nichts mit der STL zu tun, bei irgendwelchen anderen statischen Klassen ist es genauso.

    Ein einfaches

    Code
    std::list< Object* > Object::liveObjects;
    std::list< Object* > Object::deadObjects;


    sollte reichen. Was programmierst du denn da schönes? :)

    dann beiß ich ma aber in oasch ;)

    in so ca. 3 jahren hab ich dann meine eigene 3d engine ;)

    die idee für die objects hab ich von einem artikel aus dem internet und die idee scheint mir übernehmenswert.. wenn man jetzt die weiteren klassen von object ableitet, läuft mann nicht in gefahr irgendwo memory leaks zu erzeugen.. und bei meinem schlampigen programmierstil, würd sich das wahrscheinlich nicht vermeiden lassen ;)

    habs schon ausprobiert und es funktioniert! vielen dank.. war ein echt dummer fehler..

    F

    nur ein mac ist ein mac ist ein mac ist ein....

  • Zitat von thurin


    in so ca. 3 jahren hab ich dann meine eigene 3d engine ;)

    hehe :)

    Zitat von thurin


    wenn man jetzt die weiteren klassen von object ableitet, läuft mann nicht in gefahr irgendwo memory leaks zu erzeugen.. und bei meinem schlampigen programmierstil, würd sich das wahrscheinlich nicht vermeiden lassen ;)

    Stimmt.. Nur bei zyklischen Referenzen solltest du dann vermutlich doch aufpassen, die kommen nämlich nie in deadObjects rein, und werden dann erst bei CollectRemainingObjects() gelöscht. Also nicht wundern wenn du dann dein Programm irgendwann massenweise Speicher braucht, der erst am Schluss freigegeben wird. :)

  • Zitat von Irrlicht

    Also nicht wundern wenn du dann dein Programm irgendwann massenweise Speicher braucht, der erst am Schluss freigegeben wird. :)


    hauptsache, er wird wieder freigegeben ;)

    vielen dank für die hilfe!

    F

    nur ein mac ist ein mac ist ein mac ist ein....

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!