带指针的函数:成员引用基类型 (...) 不是结构或联合
Function with pointers: Member reference base type (...) is not a structure or union
我有以下错误:
"error: member reference base type 'start'
(aka 'struct no_start *') is not a structure or union".
所以,我有很多结构,例如:
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,其中包含结构,最后一个 functions.h,我在其中声明第一个文件的函数.
我不明白为什么会出现此错误。对于每个函数,我得到的错误与分配的错误一样多。
您不需要键入 malloc 的 return。这样做会创建一个指向指针的指针。作为非强制转换的 malloc 调用将 return 指向为您的结构分配的内存的指针
我不会
typedef struct no_start * start;
即 typedef something as a pointer to a structure 而无需执行
- 结构本身的类型定义
- 将指针 typedef 命名为 start_ptr
否则人们会感到困惑。正如你自己所做的那样。
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));
展开 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-typedefs",除非它们用于不透明类型(即隐藏结构定义的地方)。
如果你不喜欢在任何地方输入 struct
(这在 C++ 中是不必要的),你可以对结构进行类型定义:
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
。
我的错误是创建了结构指针。
我有typedef struct no_start * start;
相反,我需要 typedef struct no_start start;
我有以下错误:
"error: member reference base type 'start' (aka 'struct no_start *') is not a structure or union".
所以,我有很多结构,例如:
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,其中包含结构,最后一个 functions.h,我在其中声明第一个文件的函数.
我不明白为什么会出现此错误。对于每个函数,我得到的错误与分配的错误一样多。
您不需要键入 malloc 的 return。这样做会创建一个指向指针的指针。作为非强制转换的 malloc 调用将 return 指向为您的结构分配的内存的指针
我不会
typedef struct no_start * start;
即 typedef something as a pointer to a structure 而无需执行
- 结构本身的类型定义
- 将指针 typedef 命名为 start_ptr
否则人们会感到困惑。正如你自己所做的那样。
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));
展开 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-typedefs",除非它们用于不透明类型(即隐藏结构定义的地方)。
如果你不喜欢在任何地方输入 struct
(这在 C++ 中是不必要的),你可以对结构进行类型定义:
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
。
我的错误是创建了结构指针。
我有typedef struct no_start * start;
相反,我需要 typedef struct no_start start;