Eine Klasse in mehreren anderen Klassen verwenden



  • Hallo zusammen,
    ich habe eine C++-Anfängerfrage, die bestimmt auch schon mal beantwortet wurde, nur habe ich bisher nichts gefunden, was mir weiter geholfen hat..

    Zu meinem Problem:
    Ich habe eine Klasse A (Header-Datei + cpp), die ich gerne in verschiedenen anderen selbst definierten Klassen verwenden möchte Zusätzlich ist in der Header-Datei auc noch ein Enum definiert, dass ion der Klasse verwendet wird.
    Leider bekomme ich immer die Fehlermeldung vom Compiler, dass Klasse und Enum doppelt deklariert seien.
    Noch als Info, falls das relevant ist: Ich muss leider als Programmierumgebung den Borland C++ Builder 6 verwenden.

    KlasseA.h

    #include <vcl.h>
    
    enum EnumA {FullBall, HalfBall, TestBall};
    
    class KlasseA {
        EnumA enumA;
    
        public:
            double SomeProperty;
    
            KlasseA(EnumA enumA);
            double GetSomething();
    };
    

    KlasseA.cpp

    #include "KlasseA.h"
    
    KlasseA::KlasseA(EnumA enumA) {
        this->enumA = enumA;
        SomeProperty = 1.0;
    }
    
    double KlasseA::GetSomething() {
        return 5.0;
    }
    

    KlasseB.h

    #include <vcl.h>
    #include "KlasseA.h"
    
    class KlasseB {
        public:
            bool IsSomething(KlasseA &objectA);
    }
    

    KlasseB.cpp

    #include "KlasseB.h"
    
    bool KlasseB::IsSomething(KlasseA &objectA) {
        return objectA.GetSomething() == 5.0;
    }
    

    KlasseC.h

    #include <vcl.h>
    #include "KlasseA.h"
    
    class KlasseC {
        public:
            double ReturnSomething();
    }
    

    KlasseC.cpp

    #include "KlasseC.h"
    
    double KlasseC::ReturnSomething() {
        KlasseA *objectA = new KlasseA(FullBall);
    
        return (*objectA).SomeProperty;
    }
    

    Projekt.cpp

    #include <vcl.h>
    #include "KlasseA"
    #include "KlasseB"
    #include "KlasseC"
    
    classe Projekt {
        KlasseA *objectA;
        KlasseB *objectB;
        KlasseC *objectC;
    
        Projekt(void);
        void DoSomethingNice();
    }
    
    Projekt::Projekt(void) {
        objectA = new KlasseA(FullBall);
        objectB = new KlasseB();
        objectC = new KlasseC();
    }
    
    Projekt::DoSomethingNice() {
        (*objectB).IsSomething(*objectA);
        (*objectC).DoSomethingNice();
    }
    

    Compiler-Fehler

    [C++ Fehler] KlasseA.h(3): E2344 'EnumA' bereits deklariert
    [C++ Fehler] KlasseA.h(6): E2344 'KlasseA' bereits deklariert
    

    Vielen Dank schonmal im Vorraus!

    Viele Grüße
    Daniel



  • Es fehlt ein "include guard" im Header von Klasse A



  • Du includest deine KlasseA.h aus mehreren Dateien. Dadurch versucht der Kompiler das jeweils an den Stellen einzubinden und zu kompilieren.

    Umschließ deine Header mit sogenannten Include Guards:

    #ifndef KLASSEA_H
    #define KLASSEA_H
    
    //Klassendeklaration etc.
    
    #endif
    

    Bei manche Compiler geht das auch einfacher mit

    #pragma once
    
    //Klassendeklaration etc.
    


  • Licmeth schrieb:

    Leider bekomme ich immer die Fehlermeldung vom Compiler, dass Klasse und Enum doppelt deklariert seien.

    Niemand will wissen, ob du die indirekte Rede beherrschst. Copy&Paste!



  • manni66 schrieb:

    Copy&Paste!

    Hat er doch, aber erst am Ende seines Posts 😉



  • Vielen Dank an daddy_felix und Schlangenmensch. Damit funktioniert es 🙂


Anmelden zum Antworten