Klasse in Header-File auslagern

Alex_T

Erfahrenes Mitglied
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
C++:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "matrix.h"

using namespace std;

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

matrix.h
C++:
#ifndef _matrix_h_
#define _matrix_h_

class matrix {

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

matrix.cpp
C++:
#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 :confused: (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.
 
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.
 
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.
 
@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 ;)
 
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.
 
Zurück