---
title: "Vad ska innehålla vad?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/73313-vad-ska-innehålla-vad"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Alpha II"
published: "2003-04-06T14:49:00.000Z"
updated: "2003-04-14T12:54:39.000Z"
replies: 32
views: 885
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/73313-vad-ska-innehålla-vad"
---

# Vad ska innehålla vad?

_Sida 1 av 2._

## #1 — Alpha II, 2003-04-06T14:49Z

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 :( :( :(

Permalänk: https://www.webforum.nu/p/73313

## #2 — Marcus E, 2003-04-06T15:32Z

.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.

Permalänk: https://www.webforum.nu/p/1001884

## #3 — aasah, 2003-04-06T16:24Z

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.
- game.cpp inkluderar game.h

Permalänk: https://www.webforum.nu/p/1001915

## #4 — Alpha II, 2003-04-06T17:12Z

Varför får jag då dessa fel?

C:\\Documents and Settings\\Daniel\\My Documents\\Projekt\\CPP\\BounceUltimate4\>bcc32
\-tW OpenGL32.lib Glu32.lib main.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'WinMain' referenced from C:\\PROGRAM FILES\\BORLAND\\BC
C55\\LIB\\C0W32.OBJ
Error: Unresolved external 'CDebugLog::CDebugLog(char \*)' referenced from C:\\DOC
UMENTS AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CSpaceShip::CSpaceShip()' referenced from C:\\DOCUMEN
TS AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CAsteroid::CAsteroid()' referenced from C:\\DOCUMENTS
 AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CDebugLog::\~CDebugLog()' referenced from C:\\DOCUMENT
S AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CSpaceShip::Draw()' referenced from C:\\DOCUMENTS AND
 SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CSpaceShip::Update(float)' referenced from C:\\DOCUME
NTS AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CAsteroid::Draw()' referenced from C:\\DOCUMENTS AND
SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ
Error: Unresolved external 'CAsteroid::Update(float)' referenced from C:\\DOCUMEN
TS AND SETTINGS\\DANIEL\\MY DOCUMENTS\\PROJEKT\\CPP\\BOUNCEULTIMATE4\\MAIN.OBJ

C:\\Documents and Settings\\Daniel\\My Documents\\Projekt\\CPP\\BounceUltimate4\>pause
Press any key to continue . . .

Permalänk: https://www.webforum.nu/p/1001951

## #5 — GunnarD, 2003-04-06T20:05Z

Nyckeln i felmeddelandet är:

```
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.

Permalänk: https://www.webforum.nu/p/1002085

## #6 — Alpha II, 2003-04-06T20:39Z

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

Permalänk: https://www.webforum.nu/p/1002118

## #7 — aasah, 2003-04-06T20:56Z

Vad jag kommer att tänka på:
1) C++ skiljer på små och stora bokstäver. Kolla att funktionen heter exakt "WinMain".

2) Funktionen måste deklareras i någon .h fil.

Permalänk: https://www.webforum.nu/p/1002147

## #8 — Alpha II, 2003-04-07T10:28Z

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?

Permalänk: https://www.webforum.nu/p/1002505

## #9 — Alpha II, 2003-04-07T10:31Z

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

Permalänk: https://www.webforum.nu/p/1002507

## #10 — PeW, 2003-04-07T12:06Z

> **Alpha II skrev:**
>
> 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.

Permalänk: https://www.webforum.nu/p/1002541

## #11 — Alpha II, 2003-04-07T19:35Z

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?

Permalänk: https://www.webforum.nu/p/1002900

## #12 — PeW, 2003-04-07T19:50Z

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"

Permalänk: https://www.webforum.nu/p/1002907

## #13 — Alpha II, 2003-04-08T15:48Z

Hmm... så då ska jag inkludera game.h från NeheGl.h?

Permalänk: https://www.webforum.nu/p/1006315

## #14 — Alpha II, 2003-04-08T15:49Z

Är inte så säker på detta efetrsom det fanns ett exempel med där NeheGl.h inkluderades i main.cpp :l

Permalänk: https://www.webforum.nu/p/1006316

## #15 — PeW, 2003-04-08T16:16Z

> **Alpha II skrev:**
>
> WinMain funktionen ligger i NeheGL.cpp

Jag svarade:

Det är NeheGL.cpp du ska kompilera.

Du skrev sen:

> **Alpha II skrev:**
>
> Är inte så säker på detta efetrsom det fanns ett exempel med där NeheGl.h inkluderades i main.cpp

Vad är det som är oklart? Vare sig det är main eller WinMain så får det bara finnas ett av dem och det är den filen som är din huvudfil.

Om jag exempelvis har 2 st filer som jag vill använda i en main-fil gör jag så här:

fil1.h:

```
#ifndef __FIL1_H
#define __FIL1_H

#define aloha 0

void minFil1funk();

#endif
```

Fil1.cpp

```
#include "Fil1.h"

void minFilfunk()
{
 ...
}
```

Lika med fil2.
I mainfilen:

```
#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.

Permalänk: https://www.webforum.nu/p/1006344

## #16 — Alpha II, 2003-04-12T13:32Z

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å?

Permalänk: https://www.webforum.nu/p/1009058

## #17 — Alpha II, 2003-04-12T13:54Z

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

Permalänk: https://www.webforum.nu/p/1009070

## #18 — PeW, 2003-04-12T14:06Z

Grundregel:

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:

```
#ifndef _FIL1_H
#define _FIL1_H

void foo();

#endif
```

Fil1.cpp:

```
#include "fil1.h"

#define dummy 1

void foo(){
   if(!dummy)
      giveWizdom();
}
```

I main:

```
#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...

Permalänk: https://www.webforum.nu/p/1009082

## #19 — PeW, 2003-04-12T14:12Z

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.  :)

Permalänk: https://www.webforum.nu/p/1009086

## #20 — Alpha II, 2003-04-12T14:16Z

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

Permalänk: https://www.webforum.nu/p/1009088

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/73313-vad-ska-innehålla-vad  
Nästa sida: https://www.webforum.nu/amne/c-cpp/73313-vad-ska-innehålla-vad/page2.md
