Verschiedene Objekte in void-Array [Erledigt]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Verschiedene Objekte in void-Array [Erledigt]

Beitrag von heinz » 28.07.2017 21:05:39

Hallo Zusammen,

ich versuche gerade verschiedene Objekte in einem Void-Array zusammen zu fassen.
Beispielcode:

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>

class o_eiNs
{
        public:
                o_eiNs();
                ~o_eiNs(){Ende();};
                void Test(int);
        private:
                void Ende();
};

class o_zwEi
{
        public:
                o_zwEi();
                ~o_zwEi(){Ende();};
        private:
                void Ende();
};


o_eiNs::o_eiNs()
{
        printf("Start Obj. 1\n");
}

void o_eiNs::Test(int T)
{
        printf("Test #1 (%i)\n",T);
}

void o_eiNs::Ende()
{
        printf("Ende Obj. 1\n");
}

o_zwEi::o_zwEi()
{
        printf("Start Obj. 2\n");
}

void o_zwEi::Ende()
{
        printf("Ende Obj. 2\n");
}


int main()
{
        void** o_array=NULL;

        o_array=(void**)calloc(2,sizeof(void*));

        o_array[0]=new o_eiNs();
        o_array[1]=new o_zwEi();

//      o_array[0]->Test(1000);
//      (o_eiNs*)o_array[0]->Test(1000);

        delete((o_eiNs*)o_array[0]);
        delete((o_zwEi*)o_array[1]);
}
Das Erzeugen und beenden der Objekte scheint auch richtig zu Funktionieren, allerdings schaffe ich es nicht eine Methode eines Objekts zu starten.

Die Fehlermeldung lautet:

Code: Alles auswählen

error: ‘void*’ is not a pointer-to-object type
Was mache ich falsch?

Viele Grüße,
heinz
Zuletzt geändert von heinz am 28.07.2017 21:55:46, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 9231
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verschiedene Objekte in void-Array

Beitrag von Meillo » 28.07.2017 21:26:23

Der Pfeil hat einen hoeheren Vorrang als der Cast. Du musst den Cast also klammern, und dann erst den Durchgriff mit dem Pfeil machen (... vermute ich aus dem Kopf).
Use ed once in a while!

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Verschiedene Objekte in void-Array

Beitrag von heinz » 28.07.2017 21:41:01

Hallo Meillo,

erstmal Danke für die schnelle Antwort.

Ich hoffe ich habe Dich richtig verstanden:

Code: Alles auswählen

(o_eiNs*)(o_array[0])->Test(1000);
Geht aber leider auch nicht... (Selbe Fehlermeldung...)

Gruß heinz

Benutzeravatar
Meillo
Moderator
Beiträge: 9231
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verschiedene Objekte in void-Array

Beitrag von Meillo » 28.07.2017 21:48:45

heinz hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 21:41:01
Ich hoffe ich habe Dich richtig verstanden:

Code: Alles auswählen

(o_eiNs*)(o_array[0])->Test(1000);
Nein, das ist nicht noetig, weil der Arrayzugriff eh vor dem Cast ausgewertet wird. Stattdessen musst du den Cast mit einklammern:

Code: Alles auswählen

((o_eiNs*)o_array[0])->Test(1000);
Auswertungsreihenfolge: Zuerst wird das erste Element des Arrays ausgewaehlt, dann wird dieses von void* auf o_eiNs* gecastet und anschliessend erst kannst du mittels des Pfeils auf die Methode Test() der Klasse o_eiNs zugreifen.


Ohne die Klammer, versucht er den void* zu dereferenzieren und dessen Methode Test() aufzurufen, was nicht geht, weil man void* nicht dereferenzieren kann und weil dahinter kein Objekt steht das eine Methode Test() haette. Erst am Ende wuerde der Returnwert der Methode gecastet werden. Weil diese Auswertungsreihenfolge falsch ist, musst du sie durch die Klammern explizit aendern.
Use ed once in a while!

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Verschiedene Objekte in void-Array

Beitrag von heinz » 28.07.2017 21:55:27

Hallo Nochmal,

Klasse! Danke, so funktioniert es!
Jetzt hab ich es auch verstanden...

Danke nochmals.

Viele Grüße,
heinz

Benutzeravatar
Meillo
Moderator
Beiträge: 9231
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verschiedene Objekte in void-Array [Erledigt]

Beitrag von Meillo » 28.07.2017 22:02:39

Sehr gerne. :-)
Use ed once in a while!

Antworten