11. januar 2003 - 17:10
Der er
6 kommentarer og 1 løsning
Header i c++
Er der nogen som gider forklare mig lidt om header filer ?
Annonceindlæg fra DE-CIX
11. januar 2003 - 17:15
#1
Traditionelt adskiller man implementation og dekleration. Implementation placeres i c/cpp filer Dekleration placeres i h/(hpp) filer f.eks. -----Bog.h----- char * getTitel(); -----Bog.cpp--- char * getTitel() { return titel; } -----Fooo.h----- int doStuff(); -----Fooo.cpp---- int doStuff() { for(int i=0;i<12345;i++) { for(int j=0;j<54321;j++) { printf("Hello World\n"); } } } Altså en adskildelse af kode og dekleration. Godt for overskuelighedens skyld.
11. januar 2003 - 17:22
#2
Ofte kommer implementationen i form af ".lib", ".o" eller ".a" filer. På den måde behøver producenten ikke at offentliggøre implementationskoden.
11. januar 2003 - 17:24
#3
men hva så når man har en stor klasse med konstructor, adskillige klasse metoder, og nogle private instans variabler
11. januar 2003 - 17:26
#4
Et simpelt eksempel: ------------Bog.h------------ #ifndef BOG_H #define BOG_H #include <string> class Bog { public: Bog(); ~Bog(); void setTitle(string newTitle); string getTitle(); private: string title; }; #endif ------------Bog.cpp------------ #include <string> #include "Bog.h" Bog::Bog() { } Bog::~Bog() { } void Bog::setTitle(string newTitle) { title = newTitle; } string Bog::getTitle() { return title; }
11. januar 2003 - 18:16
#5
[Linker error] undefined reference to bla bla.... den fejl kommer der når man skriver et testprogram at bruge header filen i, hvordan klarer man det problem :)
11. januar 2003 - 18:19
#6
Hvis nu test programmet ser sådan ud: ------main.cpp---------- #include <iostream> #include <string> #include "Bog.h" using namespace std; int main(int argc, char **argv) { Bog bog1; bog1.setTitle("The Odyssey of Homer"); Bog *bog2; bog2 = new Bog(); bog2->setTitle("The Canterbury Tales"); cout << "Biblioteket indeholder:" << endl; cout << bog1.getTitle() << endl; cout << bog2->getTitle() << endl; delete bog2; return 0; } Så ser min makefile sådan ud: # Compiler CC=g++ # Parameters given to the compiler CFLAGS=-s # Output filename (*.exe) OUTPUT="main.exe" # Source files SRCS="main.cpp" "Bog.cpp" # Output object files (*.o) OBJS="main.o" "Bog.o" # targets all: $(CC) -c $(SRCS) $(CFLAGS) $(CC) -o $(OUTPUT) $(OBJS) $(CFLAGS) clean: del *.o Med andre ord, Både main.cpp og Bog.cpp skal compiles før det virker. Hvis ikke det virker så oplys lige hvilken compiler du bruger..
11. januar 2003 - 19:01
#7
så funger det, takker mange gange.
Kurser inden for grundlæggende programmering