我遇到以下错误:
“错误:成员引用基类型'开始' (又名'struct no_start *')不是结构或联合“。
所以,我有很多结构,如:
typedef struct no_start * start;
struct no_start{
prog * node_program;
};
这样的功能:
start * insert_start(prog * program){
start * data = (start *) malloc(sizeof(start));
data->node_program = program;
return data;
}
我有一个文件functions.c,其中有这样的简单函数,一个文件structs.h,其中有结构体,最后是function.h,其中我声明了我的第一个文件的函数。
我不明白为什么我有这个错误。对于每个函数,我得到的错误与赋值一样多。
答案 0 :(得分:0)
你不需要输入caste返回malloc。这样做会为指针创建一个指针。其中,非铸造的malloc调用将返回指向为结构分配的内存的指针
答案 1 :(得分:0)
我不会做
typedef struct no_start * start;
即将typedef作为指向结构的指针而不执行
start * data = (start *) malloc(sizeof(start));
假设start是一个结构 - 它不是。你的意思是
start data = malloc(sizeof(struct no_start));
更好的是
typedef struct no_start{
prog * node_program;
} start;
typedef start * start_ptr;
start_ptr data = malloc(sizeof(start));
答案 2 :(得分:0)
展开typedef,你会看到出了什么问题:
struct no_start ** data = (struct no_start **) malloc(sizeof(struct no_start*));
data->node_program = program; // Nope; *data is a pointer
您可以使用
start data = malloc(sizeof(*data));
data->node_program = program;
但通常最好避免" pointer-typedef",除非它们被用于不透明类型(即隐藏结构定义的地方)。
如果你不喜欢在任何地方输入struct
(在C ++中这是不必要的),你可以输入dede结构:
typedef struct no_start no_start;
no_start* insert_start(prog* program){
no_start* data = malloc(sizeof(*data));
data->node_program = program;
return data;
}
当然,在C ++中,您应该使用new
,而不是malloc
。
答案 3 :(得分:0)
我的错误是制作结构的指针。
我有typedef struct no_start * start;
相反,我需要typedef struct no_start start;