Results 1 to 5 of 5

Thread: LINK2001: Nicht aufgelöstes Symbol

  1. #1
    Baccalaureus
    Join Date
    Oct 2010
    Posts
    862
    Thanks
    92
    Thanked 104 Times in 77 Posts

    LINK2001: Nicht aufgelöstes Symbol

    1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Camera::rotateLeft(void)" (?rotateLeft@Camera@@QAEXXZ)".
    Und viele weitere Fehler in diesem Format. Eigentlich sollte dies ja bedeuten, dass er die Methode rotateLeft(void) nicht findet, zumindest verstehe ich das so.

    In Camera.h wird die public Methode definiert:
    Code:
    void rotateLeft(void);
    Camera.cpp besitzt dann ein '#include "Camera.h"'

    Da mein GameManager game Objekt die Referenz auf Camera camera besitzt rufe ich die Methode folgendermaßen in start.cpp (welches meine main Methode besitzt) auf:
    Code:
    game->camera->rotateLeft();
    Wäre sehr dankbar wenn jemand eine Ahnung hat. Eigentlich sollte das ja ein relativ einfacher Fehler sein der mit einem include zu lösen wäre. Zumindest scheint es mir so gemäß diversen stackoverflow Threads u.a.

    Edit und auch:
    1>MSVCRTD.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_WinMain@16".
    Wenn ich den Fehler mit der Camera anklicke sagt VS10 unten "Das System kann die angegebene Datei nicht finden.
    Last edited by NoxMortem; 10-04-2012 at 13:35.
    Aaaaaaaaaaaaaaaaaaaaaaaaaaaaahc++aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaah ich hasse dich!

  2. #2
    Veteran
    Join Date
    Oct 2009
    Location
    Wien
    Posts
    23
    Thanks
    1
    Thanked 9 Times in 9 Posts
    also die struktur der camera-dateien müsste ungefähr aussehen

    camera.h:
    Code:
    #ifndef _CAMERA_H_
    #define _CAMERA_H_
    
    class Camera {
    public:
        void rotateLeft(void);
    // etc
    };
    
    #endif
    camera.cpp:
    Code:
    #include "camera.h"
    
    void Camera::rotateLeft(void) { // Implementierung }
    Und wenn dein Gameobject wirklich eine Referenz, also
    Code:
    Camera& camera;
    hat, musst du
    Code:
    Game* game = new Game(...);
    game->camera.rotateLeft();
    schreiben, aber falls das Gameobject einen einen Pointer auf eine Camera (also Camera*) hat, passt dein Code natürlich.

  3. The Following User Says Thank You to Peachman For This Useful Post:


  4. #3
    Baccalaureus
    Join Date
    Oct 2010
    Posts
    862
    Thanks
    92
    Thanked 104 Times in 77 Posts
    VIELEN DANK!

    ... die Methode hieß bei mir void rotateLeft(void){//Implementierung}. und nicht Camera::rotateLeft(void) -.-
    Ja und es ist ein Camera* also ein Pointer

    Nur ist es eben so dass er jetzt (das ging vor ner Stunde irgendwie noch) folgendes nicht mehr findet:
    1>MSVCRTD.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_WinMain@16".
    1>D:\Dropbox\Studium\Semester 4\Computergraphik 2\VOID\bin\Game_Debug.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    Die Datei ist nämlich auch tatsächlich nicht vorhanden, aber sollte er die exe ja nicht beim Projekterstellen erstellen? (Sie war aber vorhanden - hab in einer Sicherheitskopie eine alte Version)
    Last edited by NoxMortem; 10-04-2012 at 13:50.
    Aaaaaaaaaaaaaaaaaaaaaaaaaaaaahc++aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaah ich hasse dich!

  5. #4
    Veteran
    Join Date
    Oct 2009
    Location
    Wien
    Posts
    23
    Thanks
    1
    Thanked 9 Times in 9 Posts
    Bei mir ist es einmal passiert, dass mein Avira Antivirus VS2010 daran gehindert hat, die .exe zu erstellen. Also vielleicht könntest du probieren, deinen Virenscanner kurz abzustellen?
    Bzgl. der MSVCRT steht in den Folien irgendwas davon, dass es zu Konflikten kommen kann. Dann soll man bei den Project Properties unter "Linker" > "Input" > "Ignore Specific Default Libaries" den Eintrag "MSVCRT" hinzufügen. Und beim Erstellen deines Projekts hast du eh "Win32 Console Application" und dann "Empty Project" ausgewählt?

  6. #5
    Baccalaureus
    Join Date
    Oct 2010
    Posts
    862
    Thanks
    92
    Thanked 104 Times in 77 Posts
    AAAH... wie ich C++ und Visual Studio 2010 hasse.

    Ein Doppelklick auf ein Dropdown_Feld in den Einstellungen scheint anscheinend zum nächsten Eintrag zu springen. Dies ist mir anscheinend irgendwann passiert.

    Unter Projekt->Eigenschaften->Linker->System->SubSystem war Windows eingestellt und da gehört natürlich Konsole (/SUBSYSTEM:CONSOLE) hin.

    Edit: Nun geht es wieder. Ich bin also da wo ich vor 2h bereits war *grrr*
    Aaaaaaaaaaaaaaaaaaaaaaaaaaaaahc++aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaah ich hasse dich!

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •