# Klasse in Header-File auslagern



## Alex_T (17. Dezember 2011)

Hallöle,

wie es der Titel schon sagt, möchte ich eine Klasse in ein Header-File auslagern, um den Quelltext übersichtlicher zu halten (es gibt noch eine .cpp, in der die Implementierung der Klasse steht).

- IDE = Code::Blocks v10.05
- Compiler = mingw32-g++

Hier mal meine bisherigen Codestücke (alles roh, da nur zum Testen):

MAIN.cpp

```
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "matrix.h"

using namespace std;

int main() {
matrix test;
return 0;
}
```

matrix.h

```
#ifndef _matrix_h_
#define _matrix_h_

class matrix {

public:
    void matix(void);
    ~matrix();
};
#endif
```

matrix.cpp

```
#include "matrix.h"

using namespace std;

    matrix::matrix(void)
    {
        //TODO
    }

    matrix::~matrix()
    {
        //TODO
    }
```

So, nun zu meinem Problem:

Wenn ich das Ganze so kompilieren lasse, dann bekomme ich folgenden Fehler von Code::Blocks:
"undefined reference to 'matrix::~matrix()'".
Wenn ich die Instanzierung von "test" in der MAIN.cpp auskommentiere, dann läuft die Kompilierung sauber durch.

Das gleiche Problem bestand auch vorher schon mit dem Konstruktor, welches sich nach erneutem Schreiben der Sourcefiles in Luft aufgelöst hat  (der Sourcecode war identisch).

Nun scheint mir der Compiler schon vertrauenswürdig, nur weiß ich nicht, was ich ändern könnte, um den Fehler zu beheben.
Vllt. könnte mir da jemand mit Rat und Tat zur Seite stehen?

Danke schon mal im Voraus.


----------



## Jennesta (17. Dezember 2011)

Hi,
du musst matrix im Header natürlich richtig schreiben 
Grüße Jennesta


----------



## Muepe32 (17. Dezember 2011)

Ich vermute auch stark, dass der Code oben nicht das ist, was du compilierst. Zwischen matix und matrix besteht nämlich ein kleiner Unterschied.

Beziehungsweise vermute ich, dass matrix.cpp gar nicht compiliert wird. Denn spätestens da bekommst du einen Fehler weil du eine Funktion mit einem Körper versiehst, die du nirgendwo deklariert hast (der Konstruktor). Da matrix.cpp aber nicht compiliert wird ist der Konstruktor natürlich auch nirgendwo mit einem Körper versehen, daher die Fehlermeldung.


----------



## saftmeister (17. Dezember 2011)

Er meckert nicht beim Kompilieren sondern beim Linken. Und was er versucht zu finden ist der Destruktor nicht der Konstruktor.

Meine Vermutung: Du hast in den Projekt-Einstellungen für die Datei matrix.cpp nicht den Haken bei Debug oder Release reingemacht, deswegen wird es weder kompiliert noch gelinkt.

Allerdings haben die beiden Vorposter recht, der Konstruktor fehlt.


----------



## Muepe32 (17. Dezember 2011)

@Saftmeister: Daher ja auch meine Schlussfolgerung:
Der Code oben wird nicht kompiliert, denn sonst gäbe es schon da einen Fehler, da der Code syntaktisch nicht korrekt ist


----------



## saftmeister (17. Dezember 2011)

Naja, syntaktisch scheint er in Ordnung zu sein, nur semantisch nicht


----------



## Alex_T (18. Dezember 2011)

Also, ich habe das mal korrigiert....ja, immer diese Schreibfehler ;-).
Dann hatte ich jedoch den gleichen Fehler für den Konstruktor.
Ich muss allerdings dazu sagen, dass ich kein Projekt angelegt hatte, sondern die Dateien einfach so als .h bzw. .cpp im gleichen Ordner abgespeichert habe ( ich war davon ausgegangen, dass Code::Blocks die Files automatisch linked ).
Nachdem ich es dann in ein Projekt eingefügt hatte, hat es geklappt.

Danke nochmal an Euch - wie immer eine gute Hilfe.


----------

