以下是List
表示,
typedef struct List{
void **array;
int lastItemPosition;
int size;
}List;
其中list->array
分配了const void *
集合,以维护项目的不变性,
list->array = malloc(INITIAL_LIST_SIZE*sizeof(const void*));
但在const void *
,
list->array
项
void arrayInsertItem(List *arrayList, const void *newItem){
...
arrayList->array[++(arrayList->lastItemPosition)] = newItem;
...
}
给出错误:
error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
arrayList->array[++(arrayList->lastItemPosition)] = newItem;
是否需要在const void **array
中声明List
以保持项目的不变性?
如何解决此问题?
答案 0 :(得分:2)
为了维护,不变性,const void * type项存储在collection list->数组中。但是给出错误:
这就是你的追求,但你没有宣布这样的阵列:
void ** array;
尝试更改为:
const void ** array;
答案 1 :(得分:0)
其中list->数组使用const void * collection
进行分配
无论如何,这不会改变array
的类型。
由于您已将void **array;
定义为成员,array
的类型指针指向void *
,array[i]
的类型为void *
。
当您要分配const void *
时,该元素也应具有相同的类型限定符。
更改
void **array;
到
const void **array;