gpt4 book ai didi

c++ - 带有指针 : Member reference base type (. ..) 的函数不是结构或 union

转载 作者:行者123 更新时间:2023-11-30 17:16:19 33 4
gpt4 key购买 nike

我遇到以下错误:

"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,我在其中声明第一个文件的函数。

我不明白为什么会出现这个错误。对于每个函数,我得到的错误数量与分配的错误数量一样多。

最佳答案

展开 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;

但通常最好避免“指针类型定义”,除非它们用于不透明类型(即隐藏结构定义的地方)。

如果您不喜欢在任何地方键入 struct (这在 C++ 中是不必要的),您可以 typedef 结构:

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

关于c++ - 带有指针 : Member reference base type (. ..) 的函数不是结构或 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683031/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com