依赖头文件需要包含在 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'.
那么,我如何确保我不必同时使用两者:
- bar.h中的前向声明(//以上第 1 行)
- 在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.
我有 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'.
那么,我如何确保我不必同时使用两者:
- bar.h中的前向声明(//以上第 1 行)
- 在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.