不完整类型'void'不可分配c

时间:2015-11-20 07:56:56

标签: c pointers

我遇到以下双指针到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;

2 个答案:

答案 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);
 }
  • 你已经为myStruct类型的变量分配了内存,但你没有使用它,如果你H->foo[0] = something你应该使用memcpy
  • 你就失去了分配
  • 如果您使用H-> foo [0]请勿添加* 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

如果使用内存动态分配,请不要忘记释放已分配的内存