依赖项头文件需要包含在c中,即使在主头文件中有Forward声明也是如此



我有三个头文件,foo.h,bar.h&FooBar.h和一个名为bar.C的C源文件

在FooBar.h 中

#pragma once
#include "bar.h"

在foo.h中:

#pragma once
#include "FooBar.h"
typedef struct _A
{
char a;
}A;

单位:bar.h

#pragma once 
/* other includes except foo.h as including that will cause circular dependency */
typedef struct _A A; //line1 - forward-declared type
void func(A* aObj);

bar.c

#include "foo.h" //line2
#include "bar.h"
void func(A* aObj)
{
if('' == aObj->a)
aObj->a = 'A';
}

现在在bar.c中,我想删除foo.h的包含,因为我已经在

bar.h函数func((中的pointer to incomplete class type is not allowedbar.c,我正试图操作aObj

并在编译后将错误点指向

C2037: left of 'aObj' specifies undefined struct/union '_A'.

那么,我该如何确保,我不必同时使用两者:

  1. bar.h中转发声明(//line1(
  2. bar.c中包含foo.h(//line2(

现在在bar.c中,我想删除foo.h的包含,因为我已经在bar.h 中转发声明了_A

您不想这样做,因为func需要查看struct _A定义才能使用它,而该定义位于foo.h中。

因此bar.c必须包含foo.h

相关内容

  • 没有找到相关文章

最新更新