Gå til innhold

VC++ probelm windows.h


Anbefalte innlegg

Videoannonse
Annonse

Objektfiler er maskinkode med relative adresser, så det er dette kildekoden din blir kompilert til. Du har ikke deklarasjonen

CHiResTimer timer;

i en eller annen header? Hvis denne headeren inkluderes både i main.cpp og engine.cpp vil symbolet dukke opp i både main.obj og engine.obj, noe linkeren liker dårlig. Poenget er at symboler blir delt mellom kildefiler (med mindre de er erklært static eller befinner seg i et anonymt navnerom), så lenge deklarasjonen er kjent.

Lenke til kommentar

men hva må jeg gjøre spesifict for å rette opp. har lest gjennom flere ganger nå. jeg har f.eks fila engine.h/.cpp og der har jeg includert hirestimer.h i engine.h det samme har jeg gjort med terrain.h/.cpp så hva må jeg gjøre. terrain.h og engine.h har ikke noe direkte kontakt så jeg kan ikke bare includere den ene inn i den andre.

 

så hva må jeg da gjøre? :hmm: vet at det sanslynligvis bare er en enkel løsning rett foran meg som jeg ikke ser.

 

Mvh. Fredrik

Lenke til kommentar

det høres ut som du har et brukket design.. du prøver tydeligvis å lage globale variabler, som er stygt og fører til nettopp slike feil..

 

jeg kan ikke huske sist jeg brukte en global variabel.. det er veldig sjelden du trenger det hvis du har et greit design. og hvis du skulle trenge det, er det oftest lurt å implementere det som en singleton.

Lenke til kommentar

Hei...

 

takker så meget for svar hjalp mye. håper også at static ikke har noe

ærlig negative effekt.

 

men så til saken: Jeg har nå et helt uforståelig problem.

 

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

 

hva betyr dette. håper på et raskt svar. har prøvd å søke men finener ikke noe. :whistle:

 

Mvh. fredrik

Lenke til kommentar
takker så meget for svar hjalp mye. håper også at static ikke har noe

ærlig negative effekt.

Hvis du klassifiserer et objekt med 'static' vil det si at det ikke kan deles mellom flere filer. Hvis du istedet brukte 'extern' i headeren, kunne du definere objektet (som deklarasjon, men uten 'extern' foran) i én kildefil (.cpp) og aksessere det samme objektet i flere filer (et globalt register er et eksempel på et slikt objekt, som du vil manipulere fra flere ulike deler av programmet ditt).

 

Det du må ha klart for deg er forskjellen på headere og kildefiler. C og C++ bruker et forholdsvis gammeldags system hvor headere blir mekanisk kombinert med kildefiler ved at preprosessoren erstatter #include <header> med å lime inn koden i headeren. Deklarasjoner av objekter, funksjoner, klasser i en header gjør at disse blir kjent i kildefiler som inkluderer headeren, da kompilatoren nekter bruk av symboler som ikke er gjort kjent (deklarert) på forhånd. Når du skriver kroppen til en klasse eller en funksjon fungerer dette som en definisjon, hvis du definerer en funksjon i en header bør du klassifisere med 'inline' så definisjonen ikke vil dukke opp flere ganger (for hver gang headeren blir inkludert).

class MyClass;   // Deklarasjon
class MyClass {};   // Definisjon

void myFunc();    // Deklarasjon
void myFunc() {}    // Definisjon

Forskjellen på definisjon og deklarasjon av et objekt er er ikke så lett å forstå når man begynner å lære C/C++. Hele forskjellen er bruken av 'extern', som vil si at symbolet er definert annetsteds og kun gjøres kjent:

extern int a;   // Deklarasjon
int a;   // Definisjon

Med mindre du husker å definere et objekt deklarert med 'extern' vil linkeren hoste opp en feilmelding. Noen klassifiserer også funksjonsprototyper som 'extern', men det er så vidt jeg vet unødvendig.

Endret av A_N_K
Lenke til kommentar

edit: fjerna det som stod her. var bare dårlig tenking fra min side. men nå har jeg fått et problem. big.

 

 main.obj : error LNK2019: unresolved external symbol __imp__glGenTextures@8 referenced in function "struct texture_t * __cdecl LoadTextureFile(char *)" (?LoadTextureFile@@YAPAUtexture_t@@PAD@Z)

 

har lagdt til extern og så bom, så skjer dette. skal jeg bruke static eller extern?

Endret av Fredrik90
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...