我遇到以下双指针到void变量void ** foo
的错误。虽然我正在构建struct类型,但我不明白为什么会出现此错误。 *heap->foo[0]
现在不应包含/指向personA
的地址吗?
typedef struct Person{
char * name;
char age;
}Person;
typedef struct myStruct{
void ** foo;
}myStruct;
void initialize(myStruct * H, int numbOfPersons){
H->foo = malloc(sizeof(myStruct*));
*H->foo = malloc(sizeof(myStruct)*numberOfPersons);
}
void insert(myStruct * H, void * personA){
*H->foo[0] = (myStruct)personA; //error here
}
int main(void){
myStruct heap;
int numberOfPpl = 2;
initialize(heap, numberOfPpl);
Person A;
A.grade = 10
strcpy(A->name, "Jason");
Insert(&heap, &A);
return 0;
}
我收到以下错误:
incomplete type 'void' is not assignable
*H->foo[0] = (Student*)I;
答案 0 :(得分:3)
类型void
不可分配!赋值的左侧必须具有可分配的类型。你需要施放作业的左侧。棘手的部分是你需要在指针级别进行强制转换:
*(myStruct*)H->foo[0] = *personA;
您的代码中还存在其他一些错误。调高编译器中的警告级别,以便可以看到它们(-Wall
如果使用gcc)。
答案 1 :(得分:1)
您的代码中存在一些错误: 错误的功能:
void initialize(myStruct * H, int numbOfPersons){
H->foo = malloc(sizeof(Person*)); // as I understand you want to add person in H with type of myStruct
*H->foo = malloc(sizeof(Person)*numbOfPersons);
}
H->foo[0] = something
你应该使用memcpy *
H-> foo [0] = * H-> foo void insert(myStruct * H, void * personA){
memcpy(H->foo[0], (void*)personA, sizeof(struct Person)); //error here
}
myStruct struct1;
不要将C关键字用作变量名称
Person A;
A.age = 10; // grade does not exist in your struct and you have forget ;
strcpy(A.name, "Jason"); // A is not a pointer don't use A->name and also you must allocate the memory before do strcpy or use char name[number_of_char] definition
如果使用内存动态分配,请不要忘记释放已分配的内存