Avatar billede gulbaek Nybegynder
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 ?
Avatar billede soreno Praktikant
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.
Avatar billede soreno Praktikant
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.
Avatar billede gulbaek Nybegynder
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
Avatar billede soreno Praktikant
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;
}
Avatar billede gulbaek Nybegynder
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 :)
Avatar billede soreno Praktikant
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..
Avatar billede gulbaek Nybegynder
11. januar 2003 - 19:01 #7
så funger det, takker mange gange.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester