Page 1 of 1

[IP] header file

Posted: Thu Nov 15, 2012 8:28 pm
by Flipper
Kan iemand me een beetje verduidelijken hoe je een header file maakt? Ik doe blijkbaar iets verkeerd, want ik krijg het volgende error:

Code: Select all

testMathLib.o: In function `main':
testMathLib.cpp:(.text+0xf): undefined reference to `Add(int, int)'
collect2: ld gaf exit-status 1 terug
Wat ik gedaan heb:
(1) Een .cpp-file myMathLib.cpp aangemaakt met daarin de functiedefinities, waaronder dit:

Code: Select all

...
int Add(int a, int b) {
return a + b;
}
...
(2) Een .h-file myMath.lib.h aangemaakt met daarin de declaraties, waaronder dit:

Code: Select all

#ifndef INC_myMathLib_H
#define INC_myMathLib_H

int Add(int, int);
...
#endif
(3) Vervolgens heb ik een testprogramma testMathLib.cpp geschreven, die onder andere het onderstaande bevat:

Code: Select all

...
int main() {
cout << Add(5, 6) << endl;
}
(4) Dan heb ik testMathLib.cpp laten compilen. Hier krijg ik dan de error die ik aan het begin van dit topic heb aangegeven... Wat doe ik verkeerd? :cry:

Re: [IP] header file

Posted: Thu Nov 15, 2012 10:43 pm
by djgl3nn
include ge ergens ? :p

in u bijhorende .cpp en in u test.cpp moet ge u .h file includen

Re: [IP] header file

Posted: Fri Nov 16, 2012 12:55 am
by Flipper
ah, moet dat ook ge-include-ed zijn in de file waar de functie-definities staan? Ik dacht dat dat allemaal vanzelf ging.. :lol:

Re: [IP] header file

Posted: Fri Nov 16, 2012 11:30 am
by Flipper
Mmh, nee, daaraan ligt het niet, ik heb

Code: Select all

#include "myMathLib.h"
geschreven in testMathLib.cpp en myMathLib.cpp.. Maar nog steeds dezelfde error.. :(

Re: [IP] header file

Posted: Fri Nov 16, 2012 5:16 pm
by Flipper
Case solved :D

Blijkbaar compileerde ik op de verkeerde manier, het moest NIET zo:

Code: Select all

g++ -c --pedantic testMathLib.cpp
g++ testMathLib.o -o testMathLib
maar WEL:

Code: Select all

g++ -c --pedantic myMathLib.cpp
g++ -c --pedantic testMathLib.cpp
g++ myMathLib.o testMathLib.o -o testMathLib
dus eerst alle bestanden compilen en dan ze allemaal samen naar één link zetten, had ik de praktijkassistent even verkeerd begrepen zeg.. :roll:

Re: [IP] header file

Posted: Fri Nov 16, 2012 5:17 pm
by Robbe
Zoals die error zegt is er een ongedefinieerde referentie naar een functie met als signatuur "Add(int, int)". Dit komt er op neer dat je die functie oproept maar dat de linker geen implementatie kan vinden.

Dit kan in jouw geval 2 oorzaken hebben
  1. Je hebt de functie niet gedefinieerd
  2. Je laat de compiler de objectcode niet mee linken in de executable/library
Aangezien je die daadwerkelijk wel hebt gedefinieerd blijft dus het tweede over. Om dit te compileren moet het er minstens zo uit

Code: Select all

$> g++ -c main.cpp -o main.o
$> g++ -c implementation.cpp -o impl.o
$> g++ impl.o main.o -o main.exe