gpt4 book ai didi

c++ - 创建成员指向 int 或 short int 的结构数组?

转载 作者:行者123 更新时间:2023-11-27 23:53:41 26 4
gpt4 key购买 nike

我正在尝试实现一个数据结构,它是一个结构数组。该结构有一个指向 unsigned intunsigned short int 的指针。

我的第一次尝试是让结构的数据成员指向一个基类。基类有两个派生类。 g++ 和 clang 都报错(no member named 'myArray' in 'Base')

在我的第二次尝试中,我使用了 void 指针,但是两个编译器都再次给出了错误(error: subscript of pointer to incomplete type '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;
}

我的问题是:

  1. 有没有可能实现我想象中的数据结构?

  2. 为什么我不能访问派生类数据成员?

最佳答案

“正确”的解决方案是使用模板。但是要解决您的问题,void* 可以指向任何内容,而编译器不知道它实际指向什么。您必须将指针转换为正确的类型:

static_cast<Derived32*>(myStructs[0].spcialArray)->x = ...;

关于c++ - 创建成员指向 int 或 short int 的结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com