我想實現一個數據結構,這是一個結構數組。該結構具有指向unsigned int
或unsigned short int
的指針。使用指向int或short int的成員創建struct數組?
我的第一次嘗試是將結構的數據成員指向基類。基類有兩個派生類。這兩個g ++以及鐺一聲錯誤(沒有成員在「基地」命名爲「myarray的」)
在我的第二次嘗試,我用空指針,但兩種編譯器再次給了一個錯誤(錯誤:指針的下標不完全類型 '無效')
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;
}
我的問題是:
是否有可能實現我想象中的數據結構?
爲什麼我無法訪問派生類數據成員?
如果你想訪問一個'void'指針後面的數據,你*有*來轉換該指針(這意味着你*有*知道它指向哪種類型的數據)。至於「基類」解決方案,你有同樣的問題:從基類訪問數組,它必須在其中聲明。而子類不能重新聲明一個屬性。 –