Ich versuche, eine Datenstruktur zu implementieren, die ein Array von Strukturen ist. Die Struktur hat einen Zeiger auf entweder unsigned int
oder unsigned short int
.Erstellen von struct-Arrays mit Elementen, die entweder auf int oder auf kurze int zeigen?
Mein erster Versuch ist der Datenelementpunkt der Struktur zu einer Basisklasse. Die Basisklasse hat zwei abgeleitete Klassen. Sowohl g ++ und Klirren gab einen Fehler (kein Mitglied namens ‚myArray‘ in ‚Basis‘)
In meinem zweiten Versuch habe ich void-Zeiger, aber beide Compiler gab wieder einen Fehler (Fehler: Index der Zeiger auf unvollständiger Typ 'VOID')
struct Base { uint32_t *x; };
struct Derived16 : public Base { uint16_t *myArray; };
struct Derived32 : public Base { uint32_t *myArray; };
struct SpecialStruct {
char *name;
uint32_t id;
Base *specialArray;
};
struct SpecialStruct2 {
char *name;
uint32_t id;
void *specialArray;
};
int main() {
// First Attempt
SpecialStruct myStructs[10];
myStructs[0].specialArray = new Derived32;
myStructs[1].specialArray = new Derived16;
myStructs[0].specialArray->x = new uint32_t[10];
myStructs[0].specialArray->myArray = new uint32_t[10];
// ^-- error: no member named 'myArray' in 'Base'
// Second Attempt
SpecialStruct2 myStructs2[10];
myStructs2[0].specialArray = new uint32_t[10];
myStructs2[1].specialArray = new uint16_t[10];
myStructs2[1].specialArray[0] = 1;
// ^-- error: subscript of pointer to incomplete type 'void'
return 0;
}
Meine Fragen sind:
Ist es möglich, meine imaginäre Datenstruktur zu erreichen?
Warum kann ich nicht auf abgeleitete Klassenmitglieder zugreifen?
Struct Wenn Sie zugreifen möchten Die Daten hinter einem "void" -Zeiger haben Sie *, um diesen Zeiger zu erzeugen (was bedeutet, dass Sie * wissen müssen, um welche Art von Daten es verweist). Was die "Basisklassen" -Lösung betrifft, haben Sie das gleiche Problem: Um auf das Array von der Basisklasse aus zuzugreifen, muss es in ihm deklariert werden. Und untergeordnete Klassen können ein Attribut nicht erneut deklarieren. –