我有三个头文件,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 allowed
bar.c,我正试图操作aObj。C2037: left of 'aObj' specifies undefined struct/union '_A'.
现在在bar.c中,我想删除foo.h的包含,因为我已经在bar.h 中转发声明了_A
您不想这样做,因为func
需要查看struct _A
的定义才能使用它,而该定义位于foo.h中。
因此bar.c必须包含foo.h