首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中的递归结构定义,错误“前向声明”

C中的递归结构定义,错误“前向声明”
EN

Stack Overflow用户
提问于 2015-05-27 11:54:59
回答 3查看 128关注 0票数 0

我希望将我的结构声明为递归结构。所以我到现在为止所做的一切都是这样的:

代码语言:javascript
复制
 typedef struct {

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;

但是当我尝试像这样初始化它时:

代码语言:javascript
复制
my_struct *alig;
alig = malloc(sizeof(my_struct)*1);
alig->child_num = 5;
alig->string = malloc(sizeof(char)*9);
strncpy(alig->string, "AAACGTCA", 8);

alig->children = malloc(sizeof(my_struct*)*alig->child_num);

int j;
for (j = 0; j < alig->child_num; j++) {
    alig->children[j] = malloc(sizeof(my_struct)*1);
    alig->children[j]->string = malloc(sizeof(char)*9); // *********error ********
}

我得到错误:"./structurs.h:27:13:注意:'struct my_struct‘的前向声明“

以及标记行中的错误: main.c:56:22: my_struct:类型'struct my_struct‘的定义不完整

现在有人犯了我的错误吗??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-27 11:56:06

代码中没有struct my_struct,您的struct是一个匿名typedef,您需要这样做

代码语言:javascript
复制
typedef struct my_struct {
     char *string;
     struct my_struct **children;
     int child_num;
} my_struct;

甚至

代码语言:javascript
复制
typedef struct my_struct my_struct;
struct my_struct {
     char *string;
     my_struct **children;
     int child_num;
};
票数 6
EN

Stack Overflow用户

发布于 2015-05-27 11:57:28

代码语言:javascript
复制
 typedef struct {

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;

应该是

代码语言:javascript
复制
 typedef struct my_struct{

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;

正如@iharob所说,您的代码中没有struct my_struct,编译器正在抱怨它,您首先有一个struct my_struct已经显示了,然后为您的结构设置了一个typedef。

票数 0
EN

Stack Overflow用户

发布于 2015-05-27 11:59:40

在你的代码中

代码语言:javascript
复制
typedef struct {
 char *string;
 struct my_struct **children; 
 int child_num;
 } my_struct;

不定义名为struct my_structstruct,而是将typedefmy_struct定义为未命名结构的别名。所以您不能在代码中使用struct my_struct。任一

任一

  • 您需要将typedef放在结构定义之前。

  • 您需要使用一个命名的struct
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30481702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档