Nicht Aufgelöstest Symbol: LNK2001



  • Guten Tag/Pre-Abend/Abend,
    Ich hab mal nach langer Zeit, wieder ne Altbekannte 3D Engine ausgekrammt, ich weiß sie ist NULL leistungsstark, aber sie reicht für meine zwecke aus, DarkGDK!.
    Ich habe folgendes Problem. Sobald ich eine Eigene Klasse schreib, prüllt mich der Compiler an....

    [Spoiler]
    1>------ Erstellen gestartet: Projekt: test, Konfiguration: Debug Win32 ------
    1>Verknüpfen...
    1>DarkPhysics.lib(EngineUpdate.obj) : Es wurde ein mit /GL kompiliertes MSIL .netmodule oder module gefunden. Verknüpfung wird mit /LTCG erneut gestartet. Fügen Sie /LTCG zur Linkbefehlszeile hinzu, um die Linkerleistung zu erhöhen.
    1> Bibliothek "C:\Users\Wegner\Documents\Visual Studio 2008\Projects\test\Debug\test.lib" und Objekt "C:\Users\Wegner\Documents\Visual Studio 2008\Projects\test\Debug\test.exp" werden erstellt.
    1>LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall CPlayer::CPlayer(int,float,float,float,float,float,float)" (??0CPlayer@@QAE@HMMMMMM@Z)".
    1>C:\Users\Wegner\Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Users\Wegner\Documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm" gespeichert.
    1>test - 2 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    [/Spoiler]

    Wenn ich jetzt noch den dazugehörigen Code Poste, wird es zuviel, da die Spoiler nicht funktionieren ^^.

    Kann mir jemand sagen, was genau dieser Fehler aussagt? Bis dato hatte ich mehr mit Java am Hut, daher kann ich mit dieser Meldung nicht viel anfagen, bzw hatte sie in JAva noch nie.

    Mit Freundlichsten Grüßen,
    CerealGuy



  • LNK2001 ist recht einfach, du hast irgendwo sowas zu stehen (mit Variablennamen):

    class CPlayer{
    ...
    CPlayer(int,float,float,float,float,float,float);
    ...
    };
    

    Damit versprichst du, dass irgendwo sowas steht:

    CPlayer::CPlayer(int,float,float,float,float,float,float){
    ...
    }
    

    Steht aber nirgends. Definiere die Funktion dann geht der Fehler weg.

    LNK4098 ist hingegen uncool. Der sagt dir, dass irgendeine Funktion oder Variable doppelt definiert ist. Wenn du Glück hast kannst du in Projekteinstellungen -> Linker -> Input (Eingabe?) -> Ignoriere spezielle Standardbibliothek -> LIBCMT benutzen und der Fehler geht weg. Wenn du Pech hast fehlen dir jetzt hundert andere Symbole weil du die Lib brauchst. Dann mal nach LIBCMT + DarkGDK suchen und hoffen dass das irgendwo steht.



  • nwp3 schrieb:

    LNK4098 ist hingegen uncool. Der sagt dir, dass irgendeine Funktion oder Variable doppelt definiert ist. Wenn du Glück hast kannst du in Projekteinstellungen -> Linker -> Input (Eingabe?) -> Ignoriere spezielle Standardbibliothek -> LIBCMT benutzen und der Fehler geht weg. Wenn du Pech hast fehlen dir jetzt hundert andere Symbole weil du die Lib brauchst. Dann mal nach LIBCMT + DarkGDK suchen und hoffen dass das irgendwo steht.

    Der Fehler weist in der Regel darauf hin, dass du irgendwelche Libraries linkest, die für eine andere Runtime gebaut wurden als deine Anwendung. Die richtige Lösung dafür ist, die entsprechenden Libraries für die passende Runtime zu kompilieren...



  • Vielen Dank für die Antworten.

    Hier meine CSpieler.h

    #ifndef CPLAYER_H
    #define CPLAYER_H
    
    class CPlayer
    {
    	public:
    		CPlayer(int ID, float PX, float PY, float PZ, float SX, float SY, float SZ);
    };
    
    #endif
    

    Hier die CPP

    #include "DarkGDK.h"
    #include "DarkPhysics.h"
    
    #pragma comment ( lib, "DarkPhysics.lib" )
    
    class CPlayer {
    	CPlayer::CPlayer(int ID, float PX, float PY, float PZ, float SX, float SY, float SZ) {
    		dbMakeObjectCube(ID, 5);
    		dbPositionObject(ID, PX, PY, PZ);
    		dbPositionCamera (dbObjectPositionX(ID), dbObjectPositionY(ID), dbObjectPositionZ(ID)+10);
    		dbPhyMakeBoxCharacterController(ID, PX, PY, PZ, SX, SY, SZ, 1, 25, 30); 
    	}
    };
    

    Hier aus meiner Main.cpp

    CPlayer player(PlayerID, 500, 10, 400, 3, 5, 3);
    

    Ist doch korrekt oder nicht?? Ich verzweifel....

    MFG
    CerealGuy



  • CerealGuy schrieb:

    Ist doch korrekt oder nicht?? Ich verzweifel....

    Nope, das class CPlayer {} um die Definition in der .cpp Datei herum ist Schwachsinn... 😉



  • Wieso genau ist das schwachsinn? Ich dachte das gehört so, nun bin ich ja eines besseren behlehrt worden :D.

    Nun, c:\users\wegner\documents\visual studio 2008\projects\test\test\cplayer.cpp(7) : error C2653: 'CPlayer': Keine Klasse oder Namespace

    Wie kann ich das verstehen? Muss ich einen NameSpace Definieren??

    MFG CerealGuy



  • ...



  • ..... Natürlich ...... Tut mir leid..... Hatte ich vorhin versehentlich gelöscht... Ich wollte daran denken, es wieder zu includieren ^^. Gedächniss wie'n Sieb :D.

    Vielen Dank Leute.

    - CerealGuy



  • Übrigens würde ich dir raten, Vektorklassen zu benutzen, damit bleibt auch die Anzahl der Konstruktorparameter in einem vernünftigen Rahmen. Lohnt sich vor allem, sobald du Positionen oder Richtungen in einem grösseren Kontext benötigst.

    Und das C vor Klassen ist nicht mehr zeitgemäss.


Anmelden zum Antworten