我的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 C2275和Compiler Error C2065。
为什么呢?我该如何解决这个问题?
答案 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} }指针。