依赖头文件需要包含在 c 中,即使在主头文件中有前向声明

Dependency Header file needs to be included in c , even with Forward declaration in main header file

我有 3 个头文件,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('[=13=]' == aObj->a)
        aObj->a = 'A';
}

现在 bar.c,我想去掉 foo.h,因为我已经转发了在 bar.h 中声明了 _A。因此,当我将其注释掉时,出现以下错误(将鼠标悬停在 aObj 上时):

pointer to incomplete class type is not allowed in function func() in bar.c 我试图操纵 aObj.

编译后错误指向

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

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

  1. bar.h中的前向声明(//以上第 1 行)
  2. bar.c中包含[=36​​=]foo.h(//以上第2行)

Now in bar.c, I want to remove inclusion of foo.h, as I have already forward declared the _A in bar.h

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

所以bar.c必须包括foo.h.