1

我的 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

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

4

1 回答 1

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. 编译器处理typedefs 和创建指针的信息已经足够了,但是由于它尚未完全定义,因此您不能声明类型对象struct node或取消引用struct node指针。

于 2012-07-10T16:31:41.867 回答