[Erledigt]Mehrfachvererbung, Diamond-Problem



  • Hi
    Ich habe mal wieder ein Problem. Ich möchte in einem Projekt Objekte durch Mehrfachvererbung aus anderen Zusammensetzten. Jetzt bekomme ich aber immer diese Fehlermeldung:

    error: request for member `higher' in `DObject', which is of non-class type D ()()'| error: request for member \Zeige' in `DObject', which is of non-class type `D ()()'|
    ||=== Build finished: 2 errors, 0 warnings ===|

    Bei diesem Quellcode:

    #include <iostream>
    
    using namespace std;
    
    class A
    {
        public:
    
            A()
            {
                Nummer = 0;
            }
    
        protected:
    
            int Nummer;
    };
    
    class B : virtual public A
    {
        public:
    
            void higher()
            {
                Nummer++;
            }
    };
    
    class C : virtual public A
    {
        public:
    
            void lower()
            {
                Nummer--;
            }
    };
    
    class D: public B, public C
    {
        public:
    
            D()
            {
                Nummer = 0;
            }
    
            void Zeige()
            {
                cout << Nummer << endl;
            }
    };
    
    int main()
    {
        D DObject();
    
        DObject.higher();
    
        DObject.Zeige();
    
        return 0;
    }
    

    Ich benutze den GNU GCC Compiler. Was mache ich falsch?



  • D DObject();
    

    Da deklariest du keine Variable, sondern eine Funktion.

    Ist prinzipiell das gleiche, wie das hier:

    int foo ();
    

    Was ja offensichtlich eine Funktionsdeklaration ist, somit ist das obige auch eine. Lass also die Klammern hinten weg.



  • 😉 stimmt danke,
    das vergesse ich andauernd wieder


Anmelden zum Antworten