tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von Jennesta
  • 1 Beitrag von Muepe32
  • 1 Beitrag von saftmeister
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
466
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Alex_T
    Alex_T Alex_T ist offline Mitglied Brokat
    Registriert seit
    Jul 2009
    Beiträge
    311
    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
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include "matrix.h"
     
    using namespace std;
     
    int main() {
    matrix test;
    return 0;
    }

    matrix.h
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #ifndef _matrix_h_
    #define _matrix_h_
     
    class matrix {
     
    public:
        void matix(void);
        ~matrix();
    };
    #endif

    matrix.cpp
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #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.
     
    Mfg, Alex

    “The function of good software is to make the complex appear to be simple.” (Grady Booch)
    “First, solve the problem. Then, write the code.” (John Johnson)

  2. #2
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Hi,
    du musst matrix im Header natürlich richtig schreiben
    Grüße Jennesta
    Geändert von Jennesta (17.12.11 um 16:41 Uhr)
    Alex_T bedankt sich. 
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

  3. #3
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    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.
    Alex_T bedankt sich. 
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    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.
    Alex_T bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    @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
     
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Naja, syntaktisch scheint er in Ordnung zu sein, nur semantisch nicht
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Avatar von Alex_T
    Alex_T Alex_T ist offline Mitglied Brokat
    Registriert seit
    Jul 2009
    Beiträge
    311
    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.
     
    Mfg, Alex

    “The function of good software is to make the complex appear to be simple.” (Grady Booch)
    “First, solve the problem. Then, write the code.” (John Johnson)

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 12.06.10, 15:23
  2. Antworten: 9
    Letzter Beitrag: 09.04.09, 16:48
  3. Auslagern von Struct in Header-Datei
    Von Radmor im Forum Borland CBuilder und VCL
    Antworten: 0
    Letzter Beitrag: 15.10.07, 18:25
  4. Header File/Klasse
    Von the_duke_at im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 31.07.04, 08:44
  5. Header-Datei mit Klasse
    Von Kwark im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 21.05.03, 17:33