在文件:" priority_queue.h"中,我定义了结构:
#include "astar.h"
typedef struct p_q{
struct astar_node* first;
struct astar_node* last;
int size;
}P_Q;
文件" astar.h"看起来像这样:
#include "priority_queue.h"
typedef struct astar_node{
struct astar_node* next;
struct astar_node* prev;
struct astar_node* PQ_next;
struct astar_node* PQ_prev;
int x;
int y;
int c;
int h;
int tot_cost;
}Astar_node;
int func(P_Q* P);
为什么我会收到错误:"未知的类型名称' P_Q' ?
如果我重新定义" funk()"致:
int func(struct p_q* P);
错误消失但我收到警告:"描述资源路径位置类型 ' struct p_q'在参数列表中声明的内容在此定义或声明之外不可见"
任何人都知道为什么?
答案 0 :(得分:1)
您的附件是通告,priority_queue.h
包括astar.h
,其中包括priority_queue.h
。这是你应该避免的事情。
尝试更改:
#include "astar.h"
typedef struct p_q{
struct astar_node* first;
struct astar_node* last;
int size;
} P_Q;
到
// Forward declaration
struct astar_node;
typedef struct p_q{
struct astar_node* first;
struct astar_node* last;
int size;
} P_Q;
您可以执行此操作,因为您只在struct astar_node
内使用指针到priority_queue.h
。因此编译器不需要知道struct astar_node
内的内容。它需要知道的是,项目中某处有一个名为astar_node
的结构。