A_N_K Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 Hæ. Så du svaret mitt? Om det heter .obj eller .o er irrelevant. Lenke til kommentar
Fredrik90 Skrevet 16. januar 2005 Forfatter Del Skrevet 16. januar 2005 ja jeg så svaret ditt. og jeg kan ikke finne at den er definert noen flere steder. vet ikke om den er definert i .obj fila men ut av feilmeldingen så ser det sånn ut. hvorfor lager vc++ disse filene. Lenke til kommentar
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) Alle kompilere lager objekt-filer .... Du må så klart vite om/hvor ting er definert -- siden det er du som har skrevet koden. Endret 16. januar 2005 av søppel Lenke til kommentar
Fredrik90 Skrevet 16. januar 2005 Forfatter Del Skrevet 16. januar 2005 ja. men det står at den er redefiner i .obj fila og det skjønner ikke jeg. skal jo væredefinert i koden og ikke i .obj fila. hva er vitsen med disse filene. boka jeg leste om c++ hadde ikke noe om dette. Lenke til kommentar
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) *doh* *.cpp == kompiler ==> *.obj *.obj ==> linker ==> *.exe/*.dll Dermed er *.obj avhengig av *.cpp .. ringer noen bjeller? Altså det som er (definert) i *.obj-filer er/(mulig hint: bør være) (definert) i *.cpp -filer. Endret 16. januar 2005 av søppel Lenke til kommentar
A_N_K Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 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
Fredrik90 Skrevet 16. januar 2005 Forfatter Del Skrevet 16. januar 2005 takker for svar. skal se på det nå. og takker for forklaringen. de 2 utfyllte hverandre Lenke til kommentar
Fredrik90 Skrevet 16. januar 2005 Forfatter Del Skrevet 16. januar 2005 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? vet at det sanslynligvis bare er en enkel løsning rett foran meg som jeg ikke ser. Mvh. Fredrik Lenke til kommentar
saboi Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 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
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 Fredrik90: Hvis du fjerner all kode og alle symboler/variabler som ikke forårsaker problemet - så kan du paste alle filene her. Men som sagt isoler problemet/koden. Jeg rører ikke det her hvis du paster masse urelatert kode. Lenke til kommentar
A_N_K Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 Som jeg spurte tidligere har du en deklarasjon à la CHiResTimer timer; i hirestimer.h f.eks? Dette fungerer ikke bare som en deklarasjon men samtidig en definisjon, så dette symbolet vil dukke opp i alle objektfilene som inkluderer headeren. Lenke til kommentar
Fredrik90 Skrevet 17. januar 2005 Forfatter Del Skrevet 17. januar 2005 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. Mvh. fredrik Lenke til kommentar
GeirGrusom Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 Hvis du ikke allerede har prøvd, trykk på Rebuild Lenke til kommentar
A_N_K Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 (endret) 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 17. januar 2005 av A_N_K Lenke til kommentar
Fredrik90 Skrevet 18. januar 2005 Forfatter Del Skrevet 18. januar 2005 takker veldig for fint svar ANK du har virkelig vært tolmodig med mine feil og gitt flotte svar. Lenke til kommentar
Fredrik90 Skrevet 18. januar 2005 Forfatter Del Skrevet 18. januar 2005 (endret) 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 18. januar 2005 av Fredrik90 Lenke til kommentar
A_N_K Skrevet 18. januar 2005 Del Skrevet 18. januar 2005 Har dette noe med at du bruker 'extern'? Det ser ut som du mangler en definisjon fra GL-biblioteket? Lenke til kommentar
Fredrik90 Skrevet 18. januar 2005 Forfatter Del Skrevet 18. januar 2005 har includert alle .lib filer og alle dll er på plass. noen hint? Lenke til kommentar
A_N_K Skrevet 18. januar 2005 Del Skrevet 18. januar 2005 Vel, det ser ut som linkeren ikke finner __imp__glGenTextures? Dvs. har du glemt å linke inn GL? Lenke til kommentar
Fredrik90 Skrevet 18. januar 2005 Forfatter Del Skrevet 18. januar 2005 tror ikke jeg har glemt det. kan du ramse opp alt jeg må linke inn til GL Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå