实现结构数组时不兼容的类型错误

时间:2017-11-05 10:12:11

标签: c struct typedef declaration

我正在尝试创建一个名为Record的结构数组。为此,我使用了以下代码:

typedef struct{
  int studentID;
  char studentName[20];
}STUDENT;

typedef struct{
   STUDENT item;
   struct RECORD *link;
}RECORD;

void initializeTable(RECORD *, int);

int main(){
  int i;
  int m;
  RECORD *hashTable;

  printf("Table Size: "); scanf("%d", &m);
  initializeTable(hashTable, m);
}

void initializeTable(RECORD *hashTable, int m){
  int i;
  hashTable = (RECORD *)malloc(m * sizeof(RECORD));
  for(i=0; i<m; i++){
    hashTable[i] = NULL;
  }
}

我收到了这个错误:

incompatible types when assigning to type ‘RECORD {aka struct <anonymous>}’ from type ‘void *’
 hashTable[i] = NULL;

我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

在此typedef声明中

typedef struct{
   STUDENT item;
   struct RECORD *link;
}RECORD;

声明有两种类型。第一个是typedef名称为RECORD的类型。第二个是在类型struct RECORD内声明的不完整类型RECORD。它们是两种不同的类型。

例如,你应该声明像

这样的结构
typedef struct RECORD{
   STUDENT item;
   struct RECORD *link;
}RECORD; 

也是这个循环

  hashTable = (RECORD *)malloc(m * sizeof(RECORD));
  for(i=0; i<m; i++){
    hashTable[i] = NULL;
  }

没有意义,因为表达式hashTable[i]不是指针而是RECORD类型的对象。