Har lite svårt att veta var vissa delar av koden ska ligga.
T ex vad ska finnas i .h filerna och vad ska finnas i .cpp? Är det .h filerna jag ska inkludera och ska jag inkludera .cpp filerna i .h filerna, och ska jag inkuldera dem i main.cpp eller main.h?
Om jag t ex har det globala objektet g_time som man måste komma åt från alla delar i programmet, vart ska jag deklarera den då? Innan jag inkluderar några andra filer eller har skrivit någon kod alls? Men om g_time också är beroende av objektet g_window (som också behöver komma åt g_time)... hur gör jag då?
Blir ständigt förvirrad och lyckas alltid hamna i sådana problem :( :( :(
.h = deklarationsfil, tala om vad som finns
.cpp = definitionsfil, beskriv vad som finns
g_time ska deklareras i en deklarationsfil(.h) och definieras i en definitionsfil(.cpp). Deklarationsfilen kan du sedan inkludera där du behöver den. Definitionsfilen ska du aldrig inkludera.
Har du korsvis användning kan du lösa det så här:
class g_window; // Tala om att det finns en klass som heter g_window
class g_time { g_window *a;};
class g_window { g_time *b; };
Jag tycker dock att man ska försöka undvika detta.
I en .h fil ligger alltså deklarationer till funktioner, klassdefinitioner samt definitionen av alla inline funktioner. (Eftersom dom inte kan göras som inline om man inte har koden tillgänglig.)
I en .cpp fil ligger alla övriga definitioner.
Exempel: Två stora klasser Person och Troll, en stor fil game som använder både Person och Troll. Vi har sex filer totalt: Person.h, Person.cpp, Troll.h, Troll.cpp, game.h och game.cpp.
Person.cpp inkluderar Person.h
Troll.cpp inkluderar Troll.h
game.h inkluderar Person.h och Troll.h - eftersom definitionerna av Troll och Person behövs för att game använder dessa typer.
Error: Unresolved external 'WinMain' referenced from
Huvud funktionen i ett konsolbaserat program heter main()
Huvud funktionen i ett windows program heter WinMain()
Du har satt projekttypen till att du vill bygga ett Windows program men du har inte någon WinMain() funktion i ditt program.
Ändra projekttypen till "konsolprogram", har inte Borland så jag vet inte exakt vad det heter.
Nej jag kompilerar som ett windows program och jag har en WinMain funktion. Fick inte meddelandet innan jag ändrade plats för #include. Använde #include "fil.cpp" flrut i alla .h filer :OO
Förstår inte riktigt hur detta fungerar... Varför ska .cpp filen inkludera .h filen? Och hur hittas .cpp filen när den inte inkluderas i .h filen och .h filen är det enda man inkluderar i huuvdprogrammet?
Det konstiga är att jag inte har ändrat koden alls i de filer där WinMain ligger som jag har laddat ner från nehe.gamedev.net... Fick bara massa konstiga fel när jag ändrade plats på include filerna... Inkluderade de filerna från main.cpp förut men ändrade plats till main.h :l
Förstår inte riktigt hur detta fungerar... Varför ska .cpp filen inkludera .h filen? Och hur hittas .cpp filen när den inte inkluderas i .h filen och .h filen är det enda man inkluderar i huuvdprogrammet?
Headern är till för deklarationer om vad som finns. Det som står där kopieras in av kompilatorn först i filen precis som när du själv deklarerar funktioner i samma fil som main och väljer att lägga definitiorna till dessa sist i koden.
Du ska inte deklarera cpp-filer med #include, utan bara h-filer, så ja svaret på frågan är att det enda du inkluderar i huvudprogrammet är h-filerna till den funktionalitet du byggt med andra cpp filer.
Fick bara massa konstiga fel när jag ändrade plats på include filerna...
Kan bero på hur de är skrivna, den ena filen kanske är beroende av något som en annan fil deklarerat och då behöver den sistnämnda hamna före den första... exempelvis.
Felet med WinMain förstår jag inte. Det hade inget med att jag ändrade include. WinMain funktionen ligger i NeheGL.cpp och jag inkluderar NeheGL.h... Varför hittas den inte av kompilatorn?
Det är NeheGL.cpp du ska kompilera. NeheGL.h klistrar kompilatorn in i början av koden i NeheGL.cpp om du inkluderat den i NeheGL.cpp med
#include "NeheGL.h"
#include "fil1.h"
#include "fil2.h"
int main()
{
bla bla bla
minFilfunk(); //från fil1
return 0;
}
Om man sen satt in andra beroenden som att fil2 använder saker ur fil1 så kan man skriva #include "fil1.h" i fil2.cpp för att komma åt de konstanterna eller vad det nu är (som aloha, i mitt exempel) och då kan man ge tusan i att inkludera fil1.h i mainfilen, även om det inte gör nåt. Fil1.cpp ska aldrig inkluderas. Men däremot, så kan din utvecklingsmiljö vilja att du anger alla filer som ska ingå. Detta göres i miljön och inte i filerna.
Jag klarar oftast av att programmera i c++ så länge all kod ligger i en fil. Men när jag splittrar upp all kod till ton av olika filer blir det .. förvirring :OO
T ex nu. Har en fil som kompilerar bra men från den filen (bounce.cpp) vill jag anropa en funktion i en annan fil (main.cpp). Jag har gjort följande:
*Inkluderat main.h i bounce.h
*Definierat funktionen i main.h
*Funktionen finns main.cpp
Problem: unresolved external
Skulle jag lägga all kod i bounce.cpp skulle allt vara skitenkelt. dock är det inte precis skoj med att ha allt i en fil och inte hitta något... Men hur löser jag detta problem och vad beror det på?
Nu blir jag galen! Ni säger att jag inte måste inkludera .cpp filen från .h filen och att jag ska bara inkludera .h filer! Hur kommer det sig då att min kompilator vägrar bry sig om .cpp filerna när jag inkluderar endast .h filer!!! :x
Det som du vill ska vara synligt från *.cpp filen i andra filer som inkluderar *.h filen, MÅSTE deklareras i *.h filen. Troligen är det en sådan sak som strular för dig.
Ex:
fil1.h:
#include "fil1.h"
int main(){
if(dummy)
foo();
return 0;
}
Ovan exempel genererar ett error i main då den inte har en susning om vad "dummy" är, eftersom den är deklarerad i cpp-filen. Om deklarationen av dummy flyttas till fil1.h blir den istället global och synlig för alla filer som inkluderar fil1.h.
Men man bör dock undvika att göra saker globala om man inte är säker på hur det används...
Eftersom det tydligen är färdig kod du pular med kan det vara ett hästjobb att försöka bena ut detta. Men om man betraktar varje h-fil som ett "interface" mot funktionalitet i cpp-filen kanske det blir lättare att ta till sig hur man bör bygga upp sånt här i framtiden. :)
Nej det är ingen färdig kod. Skrev just den (lite cut n' paste ;) ). Bara en liten enkel kod som skapar ett fönster. Sen försökte jag från den koden anropa en funktion i en annan kod fil. Och där uppstod problemet. Verkar som om kompilatorn struntar i .cpp filerna
276 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25