【发布时间】:2022-01-05 11:30:07
【问题描述】:
在尝试打印我创建的结构的字段时,我收到错误消息“成员引用基类型 'void' 不是结构或联合”。
这是通过单链表节点递增的 for 循环,只要该节点不为空:
for (NODE *temp = sList->head; temp!=NULL;temp=temp->next){
printf("DocNo: %d \n",*(int)temp->dataPtr->docNum);
}
我的NODE 结构如下所示(包含dataPtr 字段):
typedef struct node{ //node structure definition (the individual nodes in the list)
void* dataPtr;
struct node* next;
} NODE;
我的PRINTJOB 结构(包含docNum 字段):
typedef struct printJob{
int docNum;
int requestPri;
int pageNums;
int numCycles;
} PRINTJOB;
此外,我创建了一个指向PRINTJOB 结构的指针并用值填充字段,然后调用一个insertList() 函数,该函数接受一个指向已创建列表的指针和指向已填充PRINTJOB 结构的指针。
如何访问PRINTJOB的字段?
【问题讨论】:
-
那么
temp->dataPtr是否真的指向struct printJob? -
如果是这样,你想要
printf("DocNo: %d\n", ((struct printJob *)temp->dataPtr)->docNum); -
是的,我相当肯定它确实如此,因为单步调试调试器表明链接被正确分配。当我打印出来时,它也会返回 struct printJob 的地址。
-
结构的地址是它的第一个成员的地址。因此,每个列表节点的地址是
struct printJob的地址(例如指向)的地址。请注意上面@SteveSummit 如何在演员表和节点周围使用(...),以确保在访问docnum成员之前具有正确的运算符优先级。跨度>
标签: c