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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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