2015-05-10, 22:19
  #1
Medlem
Jag har fått en .h fil och lagt den i samma mapp som min .c fil. Nu vill jag använda en funktion som finns i .h filen men då får jag felmeddelandet: undefined reference to `...'

Jag använder mig av Code::Blocks och kompilatorn GNU GCC Compiler

Jag är väldigt ny med c programmering och skulle vilja ha en förklaring som idioter kan förstå.
Citera
2015-05-10, 22:30
  #2
Medlem
Citat:
Ursprungligen postat av vargarna
Jag har fått en .h fil och lagt den i samma mapp som min .c fil. Nu vill jag använda en funktion som finns i .h filen men då får jag felmeddelandet: undefined reference to `...'

Jag använder mig av Code::Blocks och kompilatorn GNU GCC Compiler

Jag är väldigt ny med c programmering och skulle vilja ha en förklaring som idioter kan förstå.

har du inkluderat header filen i din .c fil?
Citera
2015-05-10, 22:31
  #3
Medlem
kimdah2002s avatar
headerfiler innehåller vanligtvis bara typdeklarationer och funktionsprototyper
Funktionsdefinitionerna återfinns i en .c eller .lib eller .dll fil

Har du bara en .h fil
Citera
2015-05-10, 22:32
  #4
Medlem
Citat:
Ursprungligen postat av newone
har du inkluderat header filen i din .c fil?
Ja, om du menar #include "headerfilen.h"
Citera
2015-05-10, 22:35
  #5
Medlem
Citat:
Ursprungligen postat av kimdah2002
headerfiler innehåller vanligtvis bara typdeklarationer och funktionsprototyper
Funktionsdefinitionerna återfinns i en .c eller .lib eller .dll fil

Har du bara en .h fil
Okej, så jag måste göra funktionerna också? Jag har bara fått headerfilen
Citera
2015-05-10, 22:35
  #6
Medlem
Försök göra det lätt för folk att kunna svara (korrekt) på din fråga :

Allmänt försök att skriva ned hela felmedelandet.
(Gärna med klipp o klistra utan att skriva av det..)
Alla kan inte din kompilator och känner inte igen texten i felmedelanden.
Då kan det vara bra att ha den fulla texten ifrån felet.

Allmänt om C och C++.

Du kan INTE ( normalt ) använda en funktion från en .h fil.

Du behöver deklarera en funktion.
Detta görs ofta i header filer .h filer.
Sedan måste funktionen defineras..
Detta görs ofta i .c filer ( eller i så kallade libbar; du kommer inte använda libbar för dina saker )

Men för att kunna använda en funktion så behöver den också finnas någonstans.
Detta görs normal i C filer, (medan c++ kan ha lite olika .cpp tror jag är vanligast)

Ett annat sätt att säga att det hela:

Om jag + en kompis skall åka bil, så kan jag fråga honom om han har nycklarna ?
(Se ifall nycklarna är deklarerade)
Men det räcker inte om han säger att han har dem..
Nycklarna måste finns någonstans på någon av oss när vi är framma vid bilen också.
(När programmet skall "länkas" ihop)
Citera
2015-05-11, 12:18
  #7
Medlem
kimdah2002s avatar
Citat:
Ursprungligen postat av vargarna
Okej, så jag måste göra funktionerna också? Jag har bara fått headerfilen
Ja funktionen måste ju innehålla något, det räcker inte bara med att tala om vad den heter.
Citera
2015-05-12, 18:15
  #8
Medlem
En headerfil kan mycket väl innehålla funktions definitionen likaväl som en .c/.cpp fil. Det finns inget magiskt med header filer. Man inkluderar kod, punkt.

Det man kan får problem med om man definierar funktioner i header filer är att det blir multipla definitioner om man inkluderar headern i fler än en .c/.cpp fil. Och då får man vanligtvis ett error av länkaren.

Definierar man däremot funktionen som "inline" har man inte några sådana problem, dock dupliceras då koden in överallt där du anropar funktionen.

Men för att komma till rätta med ditt problem behövs nog som sagt lite mer information. Posta gärna din kod, och fulla fel-meddelandet. Det behöver inte alls vara så att du saknar någon .c/.cpp fil eller lib, utan att det är något helt annat som ställt till det.
Citera
2015-05-12, 21:31
  #9
Medlem
kimdah2002s avatar
Citat:
Ursprungligen postat av masterflex22
En headerfil kan mycket väl innehålla funktions definitionen likaväl som en .c/.cpp fil. Det finns inget magiskt med header filer. Man inkluderar kod, punkt.

Det man kan får problem med om man definierar funktioner i header filer är att det blir multipla definitioner om man inkluderar headern i fler än en .c/.cpp fil. Och då får man vanligtvis ett error av länkaren.

Definierar man däremot funktionen som "inline" har man inte några sådana problem, dock dupliceras då koden in överallt där du anropar funktionen.
Man kan skriva spagettikod om man vill i c men vill man vara lite strukturerad så blandar man inte prototyper och definitioner i samma fil. Det blir oftast problem vid kompileringen som du själv säger. Nej inline innebär inte att koden dupliceras överallt det avgör kompilatorn.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in