使用C时在头文件中定义struct时的编译错误

时间:2013-04-05 15:45:01

标签: c struct

我有一个奇怪的问题。我已经阅读了所有可以找到的文章,我想我认为一切都是正确的:

我在头文件a.h

中定义了一个结构
typedef struct{
  int io;
} apa;

这个文件位于一个文件夹中,比方说src/model

此外,在根目录中我有主文件,我包含头文件如下:

#include "a.h" 

int main(){
  apa X;
 return 0;
}

当我根据I-flag使用带有-Isrc/model的gcc编译它时,我收到错误编译警告:

'apa' undeclared (first use in this function)
(Each undeclare identifier is reported only once for each function it appears in)
X undeclared (first use in this function) 

我似乎无法找到问题所在。帮助赞赏。

3 个答案:

答案 0 :(得分:0)

如果主文件与头文件位于不同的文件夹中,则应提及主文件中头文件的总路径。

Eg)的

#include "/src/model/a.h"

答案 1 :(得分:0)

如果将头文件包含为#include "a.h",编译器将首先在当前目录中搜索头文件,然后在标准库目录中搜索。在您的情况下,您已将头文件保存在名为src/model的目录中,将主文件保存在名为root的目录中。因此编译器找不到头文件。为了解决这个问题,您将头文件和主文件保存在同一目录中,或者在包含标题的同时给出整个路径,如下所示。

#include "/src/model/a.h"

答案 2 :(得分:-1)

如果你的头文件在不同的文件夹中,那么你需要提到头文件到主文件的完整路径

例如

instead of just using
#include "a.h"
you have to use   
#include "path to header file/a.h"