使用struct和typedef编译器错误

时间:2012-07-10 11:32:00

标签: c compiler-errors

我的VS项目中有以下文件:

// list.h

#include "node.h"

typedef struct list list_t;

void push_back(list_t* list_ptr, void* item);


// node.h

typedef struct node node_t;


// node.c

#include "node.h"

struct node
{
   node_t* next;
};


// list.c

#include "list.h"


struct list
{
    node_t* head;
};

void push_back(list_t* list_ptr, void* item)
{
   if(!list_ptr)
       return;

   node_t* node_ptr; // Here I have two compiler errors
}

我遇到编译错误:Compiler Error C2275Compiler Error C2065

为什么呢?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是list.h在预处理器处理#include行之后的样子(排除了一些注释):

// list.h 

typedef struct node node_t;

typedef struct list list_t; 

void push_back(list_t* list_ptr, void* item); 

在list.c中使用此标头时,编译器会遇到struct node的问题,因为它未在此上下文中定义。它仅在node.c中定义,但编译器无法从list.c中看到该定义。

由于您只使用指向node_t的指针,请尝试将node.h更改为:

// node.h     

struct node;
typedef struct node node_t;

现在,您已预先声明存在名为struct node的数据类型。这是编译器处理typedef和创建指针的足够信息,但由于它尚未完全定义,因此您无法声明类型为struct node的对象或取消引用{{1} }指针。