#include klappt nicht! warum???



  • hallo,

    hier mein problem:

    ich habe mein c++ projekt auf mehrere dateien verteilt. bisher alles gut, doch dann das:

    in einer header(.h)-datei definiere ich eine klasse, die ich in einer anderen klasse verwenden möchte, in der .cpp-datei sind alle funktionen usw. definiert.

    will ich nun diese klasse in einer anderen datei instanziieren, z.b. so:
    (in Klasse2.cpp)

    #include "Klasse1.h"
    //...
    Klasse2::foo()
    {
      Klasse1 k;
      k = Klasse1(param1, param2);
    }
    //...
    

    schmeißt mir visual c++ (6.0) folgendes um die ohren:

    error C2065: 'Klasse1' : nichtdeklarierter Bezeichner
    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'k'
    error C2065: 'k' : nichtdeklarierter Bezeichner
    

    und das, obwohl ich doch die klassendeklaration von Klasse1 eingebunden hab!
    die dateien sind in meinem vc++-projekt auch alle eingebunden!

    hat hier irgend jemand einen plan, was ich hier falsch mache?

    für schnelle hilfe wäre ich sehr dankbar!



  • Poste doch mal den Quelltext deiner Headerdatei.



  • Da muss irgendein Müll im .h-File drinnenstehen, denn der von dir gepostete Code passt schon so.

    Nur würd ich gleich

    Klasse1 k(param1, param2);
    

    schreiben.



  • Und ich würde noch dazu sagen das deine Klasse CKlasse1 heißt, oder? Bei Source Dateinamen wird das C ausgelassen, also dein Code :

    #include "Klasse1.h"
    //...
    CKlasse2::foo()
    {
      CKlasse1 k = CKlasse1(param1, param2);
    }
    //...
    

    Oder steht in dem Header der Klasse CKlasse1 nur nen haufen müll?!?



  • (D)Evil schrieb:

    Und ich würde noch dazu sagen das deine Klasse CKlasse1 heißt, oder?

    Eigentlich ist diese "Namenskonvention" mit dem C vor Klassennamen ja nur eine lästige Angewohnheit der Visual-Studio-Assistenten. Aber Standard ist das jedenfalls nicht.



  • ok, header-datei sieht im prinzip wie folgt aus:

    Klasse1.h:

    #ifndef __KLASSE1__H
    #define __KLASSE1__H
    
    class Klasse1{
      public:
        Klasse1(Type param1, Type param2);
        ~Klasse1();
        //...
      private:
        //...
    };
    
    #endif
    

    Klasse2.h

    #ifndef __KLASSE2__H
    #define __KLASSE2__H
    
    class Klasse2{
      public:
        Klasse2();
        ~Klasse2();
    
        //...
      private:
        //...
    };
    
    #endif
    

    also nix besonderes!



  • Wird deine Klasse2.h auch inkludiert? Fehlt deiner foo-Funktion auch im Originalquelltext der Rückgabewert?



  • masterofx32 schrieb:

    Wird deine Klasse2.h auch inkludiert? Fehlt deiner foo-Funktion auch im Originalquelltext der Rückgabewert?

    ja zu beidem!



  • verzweifelt! schrieb:

    masterofx32 schrieb:

    Wird deine Klasse2.h auch inkludiert? Fehlt deiner foo-Funktion auch im Originalquelltext der Rückgabewert?

    ja zu beidem!

    Headerdatei:

    Gut.

    Rückgabewert:

    Nicht gut. Wenn kein Rückgabewert, dann void. Nur der Konstruktor darf ganz ohne 😉
    Vielleicht ist das ja schon das Problem



  • k = Klasse1(param1, param2);
    

    Was willst du eigentlich damit?

    Klasse1 k;
    

    Hier hast du eine Instanz deiner Klasse auf dem Stack.


Anmelden zum Antworten