[C++] Seltsames Problem mit Headerdatei

Von: , Frage gestellt am Di, 25. Aug 2009

Hallo,
ich bin gerade dabei, mich etwas in C++ unter Linux (Ubuntu) einzuarbeiten. Als Editor benutze ich Geany. Testweise habe ich folgenden Code geschrieben:

main.cpp:

#include<iostream>
#include "testclass.h"
using namespace std;
int main(void)
{
TestClass tc;
tc.main();
return 0;
}


testclass.h:
#ifndef _testclass_h_
#define _testclass_h_
class TestClass
{
public:
TestClass(); 
~TestClass();
int main();
};
#endif


testclass.cpp:
#include <iostream>
#include "testclass.h"
using namespace std;
TestClass::TestClass()
{
cout<<"Konstruktor wurde aufgerufen."<<endl;
}
TestClass::~TestClass()
{
cout<<"Destruktor wurde aufgerufen."<<endl;
}
int TstClass::main()
{
cout<<"Test"<<endl;
return 0;
}


So weit, so gut. Wenn ich das ganze Kompiliere, bekomme ich Fehlermeldungen "undefined reference to `TestClass::TestClass()'" und "undefined reference to `TestClass::main()'". Es scheint so, als würden sich die cpp-Dateien gegenseitig nicht kennen. Binde ich die testclass.cpp per include in die main.cpp oder die testclass.h ein, funktioniert alles. Wobei letzteres ziemlich sinnlos ist, weil sich die zwei Dateien dann gegenseitig einbinden...
Kann es sein, dass es gar nicht an mir (oder an dem von mir erstellten Code) liegt, sondern an Geany? Ich habe über Projekt->Neu ein Projekt erstellt. Die Dateien werden ordnungsgemäß alle in der Registerkarte "Dokumente" aufgelistet.

Vllt. könnt ihr mir ja helfen...

Vielen Dank schonmal im Voraus für die Antworten.

19 Antworten zu dieser Frage

  1. Antwort von nach 13 Minuten 0 hilfreich
    Re: [C++] Seltsames Problem mit Headerdatei

    Hi,

    also, ich bekomme in deinem Beispiel nur die Fehlermeldung, dass TstClass nicht declared ist (zu recht, derweil du dich bei TestClass::main verschrieben hast).

    Gruss
    norsemanna

    • Antwort von nach 25 Minuten 0 hilfreich
      Re^2: [C++] Seltsames Problem mit Headerdatei

      Stimmt *schäm*. Trotzdem bleibt der Fehler derselbe.

      • Antwort von nach 55 Minuten 0 hilfreich
        Re^3: [C++] Seltsames Problem mit Headerdatei

        Hi, Stimmt *schäm*. Trotzdem bleibt der Fehler derselbe.
        du bekommst also bei

        g++ main.cpp TestClass.cpp

        immer noch einen Fehler?

        Gruss
        norsemanna

        • Antwort von nach 2 Stunden 0 hilfreich
          Re^4: [C++] Seltsames Problem mit Headerdatei

          Werde ich so bald wie möglich mal probieren, komme wahrscheinlich heute nicht mehr unter Linux rein. Ich überlasse das Kompilieren und Erstellen eigentlich Geany. Kann es sein, dass die Dateien nicht zusammen in dem Projekt erkannt werden? Sie liegen alle im selben Ordner, ich habe bisher keinen Menüpunkt "Datei zum Projekt hinzufügen" oder so ähnlich gefunden.

          • Antwort von nach 3 Stunden 0 hilfreich
            Re^5: [C++] Seltsames Problem mit Headerdatei

            Hallo Ich überlasse das Kompilieren und Erstellen eigentlich Geany.
            Ist eher von abzuraten. Kann es sein, dass die Dateien nicht zusammen in dem Projekt
            erkannt werden? Sie liegen alle im selben Ordner, ich habe
            bisher keinen Menüpunkt "Datei zum Projekt hinzufügen" oder so
            ähnlich gefunden.
            Eben. Geany ist "etwas rudimentär". Wenn Du wirklich eine
            gute IDE suchst, die unter Windows und Linux zu verwenden
            ist, dann nimmt Netbeans.

            Allerdings erst, wenn Du das "Prinzip" verstanden hast,
            wie man händisch aus Einzelteilen ein lauffähiges Programm
            zusammenbastelst. Im nächsten Schritt schreibst Du dann
            ein Makefile, welches diesen Prozess übernimmt. *Und dann*
            könntest Du auf den Luxus einer IDE zurückgreifen ;-)

            Grüße

            CMБ

            • Antwort von nach 23 Stunden 0 hilfreich
              Re^6: [C++] Seltsames Problem mit Headerdatei

              Danke für den Tipp. Ich habe mir jetzt Netbeans und das C/C++-Addon runtergladen und komme eigentlich gut zurecht. Eine Sache die mir gar nicht gefällt: Netbeans setzt die geschweiften Klammern so:
              int main() {
              }
              Was für mich grässlich aussieht. Ich hätte sie lieber so:
              int main()
              {
              }
              Wie kann ich das ändern?
              Ebenso nervig ist, dass Netbeans nach der öffnenden geschweiften Klammer gleich die schließende schreibt, was bei mir immer zu doppelten schließenden Klammern führt...

            • Antwort von nach einem Tag 0 hilfreich
              Re^7: [C++] Seltsames Problem mit Headerdatei

              Hallo Eine Sache die mir gar nicht gefällt: Netbeans setzt die
              geschweiften Klammern so:
              int main() {
              }
              Was für mich grässlich aussieht. Ich hätte sie lieber so:
              int main()
              {
              }
              Wie kann ich das ändern?
              Tools / Options / Editor / Formatting /
              [Language] ==> "C"
              [Style] => K&R

              [OK] Ebenso nervig ist, dass Netbeans nach der öffnenden
              geschweiften Klammer gleich die schließende schreibt, was bei
              mir immer zu doppelten schließenden Klammern führt...
              Tools / Options / Editor / Code Completion /
              [Language] ==> "All Languages"

              [ ] Insert closing brackets automatically

              [OK]

              Grüße

              CMБ

            • Antwort von nach einem Tag 0 hilfreich
              Re^8: [C++] Seltsames Problem mit Headerdatei

              Danke. hat mir sehr geholfen! Nur "Code Completion" konnte ich nicht finden!?

              Noch eine kleine Frage: Kann man irgendwo einstellen, dass in neuen Header-Files statt

              #ifndef _MAIN_H
              #define _MAIN_H
              ...

              das hier steht:

              #ifndef _MAIN_H_
              #define _MAIN_H_
              ...

              ?

            • Antwort von nach einem Tag 0 hilfreich
              Re^9: [C++] Seltsames Problem mit Headerdatei

              Hallo Nur "Code Completion" konnte ich nicht finden!?
              Netbeans 6.7.1 ? Noch eine kleine Frage: Kann man irgendwo einstellen, dass in
              neuen Header-Files statt

              #ifndef _MAIN_H
              #define _MAIN_H
              ...

              das hier steht:

              #ifndef _MAIN_H_
              #define _MAIN_H_
              Weiss ich nicht. Was stört Dich am default?

              Grüße

              CMБ



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!