以下insertSNode
函数插入item
和return
更新指针。在insertSnode
函数中,来自不同struct
的每个数据都被相应地取消引用。
问题:我在(LINE 1)、(LINE 2)、(LINE 3)、(LINE 4) 上收到编译器错误,并显示以下错误消息:
“成员引用基类型 'void' 不是结构或联合。”
问题:
如何摆脱编译器错误?如果我不能,或者,我们是否有更好的解决方案来编写与这种情况相同的函数?假设有太多struct
类型(即Type_A、Type_B 等),用不同的类型声明创建不同的函数是极其低效的。
*pListTypeA = (Type_A *) insertSnode(*pListTypeA, pPreTypeA, pTypeAItem, TYPEA);
*pListTypeB = (Type_B *) insertSnode(*pListTypeB, pPreTypeB, pTypeBItem, TYPEB);
*pListTypeC = (Type_C *) insertSnode(*pListTypeC, pPreTypeC, pTypeCItem, TYPEC);
// more assignments
insertSnode
定义:
void* insertSnode(void* pList, void* pPre, char* item, const int type) {
void *pNew;
if (TYPEA == type) {
pList = (Type_A*) pList;
pPre = (Type_A*) pPre;
pNew = (Type_A*) pNew;
} else if (TYPEB == type) {
pList = (Type_B*) pList;
pPre = (Type_B*) pPre;
pNew = (Type_B*) pNew;
} else (TYPEC == type) {
pList = (Type_C*) pList;
pPre = (Type_C*) pPre;
pNew = (Type_C*) pNew;
}
if (!(pNew = malloc(sizeof(*pList)))) {
printf(ERR_NOT_ENOUGH_MEMORY);
exit(EXIT_NOT_ENOUGH_MEMORY);
}
pNew->name = item; // compiler error: (LINE 1)
if (pPre == NULL) {
pNew->link = pList; // compiler error: (LINE 2)
pList = pNew;
} else {
pNew->link = pPre->link; // compiler error: (LINE 3)
pPre->link = pNew; // compiler error: (LINE 4)
}
return pList;
}
笔记:
仅供参考:我能够在没有用于类型声明的 if 语句和只有一种类型(例如 Type_A)的情况下运行此代码。所以,我们都知道除了类型声明之外没有外部问题。