07. april 2004 - 10:57Der er
21 kommentarer og 1 løsning
Error LNK2001
Hvad vil det sige hvis jeg linker mit program og den giver fejlen: error LNK2001: unresolved external symbol "public: static bool * Input::Keys" (?Keys@Input@@2PA_NA)
Alle filer er tilføjet til projectet... Jeg lagde mærke til at alle fejlene kom ved statiske metoder. Jeg har klasser som kun består af statiske felter og metoder. Så jeg tænkte på om det ikke ville være smartere at bare gøre dem til functioner istedet for statiske medlemmer af en klasse? Så jeg har prøvet at ændre på alle de klasser der har statiske medlemsdata til at de bare er functioner.. Men nu kommer en anden type fejl: "error LNK2005: "bool Right" (?Right@@3_NA) already defined in main.obj" Hvad betyder det?
Alle header filer er beskyttet mod at blive inkluderet 2 gange. Rebuild all virker heller ikke..
Jeg forstår ikke helt hvordan der kan opstå fejl i Linking af obj filer. Hvilke slags fejl er det linkeren opfanger som compileren ikke gør? Man skulle ellers tro at hvis compileren havde sagt god for alt i koderne så burde den også kunne linkes fint.
Der er specialt 1 fejl som jeg syntes er meget mystisk: "Input.obj : error LNK2005: "int SZ" (?SZ@@3HA) already defined in main.obj"
variablen SZ bliver defineret i headeren: Input.h Den variabel bliver faktisk aldrig brugt på noget tidspunkt i hele programmet.. Men bliver kun defineret... Og den bliver heller aldrig tildelt nogen værdi nogen steder i programmet.
Input.h som indeholder int SZ bliver includeret flere gange fra forskellige .cpp filer.. Men jeg trode ikke den kunne includeres flere gange eftersom jeg har en: #ifndef INPUT_H #define INPUT_H // Input Header kode #endif
De data som ligger i Input.h skal bruges i flere forskellige .cpp filer.
Men hvis jeg nu har en header fil som indeholder nogen globale variabler og 2 .cpp filer som begge skal bruge de variabler. Så bliver jeg jo nød til at inkludere header filen i begge .cpp filer.
int main() { foobar(); printf("%d\n",v); return 0; }
C:\>type z2.c #include "z.h"
void foobar() { v = 123; }
C:\>cl z1.c z2.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x8 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
z1.c z2.c Generating Code... Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:z1.exe z1.obj z2.obj z2.obj : error LNK2005: _v already defined in z1.obj z1.exe : fatal error LNK1169: one or more multiply defined symbols found
int main() { foobar(); printf("%d\n",v); return 0; }
C:\>type z2.c #include "z.h"
void foobar() { v = 123; }
C:\>cl z1.c z2.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
z1.c z2.c Generating Code... Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
int main() { foobar(); printf("%d\n",v); return 0; }
C:\>type z2.c #include "z.h"
void foobar() { v = 123; }
C:\>cl z1.c z2.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
z1.c z2.c Generating Code... Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.