我正在尝试为我的forks写一个进程表。我有一个全局表,每个进程都必须写入此表。
我有结构
typedef struct {
int pid; /* Prozess ID */
char* name; /* Prozess Name (Programm) */
char* status; /* Status des Programms */
int check; /* bereits abgerufen? 1 - abgerufen, 0 - nicht abgerufen */
} Pstatus;
听着:
typedef struct liste {
void *kopf;
struct liste *rest;
} *Liste;
listeKopf:
void* listeKopf(Liste l) {
if(l==NULL)
abbruch("listeKopf(listeLeer) undefiniert");
return l->kopf;
}
listeAnfuegen:
Liste listeAnfuegen(Liste l, void* element){
Liste neu=reserviere(sizeof (struct liste));
neu->kopf = element;
neu->rest = l;
return neu;
}
我正在使用struct Pstatus将我的进程编写到列表中。当我尝试从列表中读取时,我收到错误:转换为第284行请求的非标量类型
我的代码在这里:
有人能帮助我吗?
答案 0 :(得分:1)
所以Liste
是一个通用列表,可以通过void *
指针保存对任何内容的引用,对吗? listeKopf
返回该指针。
根据您的定义,Pstatus
是一个结构,而不是指向struct的指针,因此您无法从void *
转换为它。您也无法使用->
运算符访问其成员,只能使用点.
语法。
(作为个人品味,我不喜欢typedef
指针类型,因此您可以通过查看代码中的星号来查看变量是否为指针。)
答案 1 :(得分:0)
我看了你的代码,基本上在你的第284行,你有这个表达式:
p = (Pstatus) listeKopf(temp);
p只是Pstatus struct variable
而你的listeKopf(temp)
返回(void *kopf)
,它们无法分配给非缩放器变量(它应该被分配给指针)。
您应该将代码更改为:
Pstatus *p
p = listeKopf(temp);
以避免出现错误,并且不需要cast to Pstatus
,因为void *
可以分配给任何指针类型。
C中的标量类型:
我希望它有所帮助。