"错误:未知类型名称" - 在函数声明中使用结构别名

时间:2018-05-26 04:56:10

标签: c struct include

在文件:" 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'在参数列表中声明的内容在此定义或声明之外不可见"

任何人都知道为什么?

1 个答案:

答案 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的结构。