2017-05-23 4 views
-1

Ich erhalte die Fehlermeldung:Casting void * zu anderen Arten

error: 'void*' is not a pointer-to-object type 

Für den folgenden Code:

Button config_b1 = Button("b1"); 
Button config_b2 = Button("b2"); 
Button config_b3 = Button("b3"); 

const void *const buttons[3] PROGMEM = { 
&config_b1, &config_b2, &config_b3 
}; 

in irgendeiner Funktion:

(Button)*buttons[1]->setText("Foo"); 

Die Casting-Knopf schlägt fehl.

Dies ist nur ein vereinfachtes Beispiel. Die Array- "Buttons" werden verschiedene Arten von Objekten haben, daher muss ich sie als void initialisieren und dann auf den richtigen Typ innerhalb der Funktion umwandeln.

+0

'Button config_b1 = Button (" b1 ");' Das sieht aus wie C++. Außerdem können Sie eine 'void *' nicht dereferenzieren, weil 'void' ein unvollständiger Typ ist. – InternetAussie

+0

Es sieht aus wie OO-style-Programmierung mit C, von der Art, die Sie oft sehen, wenn C++ nicht verfügbar ist. –

+0

@TobySpeight Wie können sie dann den Typnamen 'Button' als Funktion verwenden? In C++ ist dies gültig, da es ein "Button" -Objekt erstellen wird. Ich kann mir keinen Weg vorstellen, wie dies (neben der Makrohölle) gültig ist. – InternetAussie

Antwort

5

Ich denke, das ein einfacher Vorrang Fehler ist, und Sie müssen

((Button *) buttons[1])->setText("foo"); 

Ist Dir sicher ist dies C, durch die Art und Weise? Diese Art von Aufruf sieht wirklich wie C++ aus (es könnte C sein, aber dann würde man in den meisten Fällen ein explizites this Äquivalent benötigen).

+0

Ich sehe es als eine einfache C-Funktion Zeiger, aber nicht sicher, was Sie mit _ 'this' äquivalent_ bedeuten. Kannst du bitte kommentieren? – ryyker

+0

Danke Kumpel, es hat gut funktioniert! Dieser Code ist übrigens eine Mischung aus C- und C++ - Code. Prost. –