所以我更有可能在 C 中遇到交叉引用问题
你好,(由于某种原因我不能先写出来)
基本上这段代码:
结构A.h:
#pragma once
#include "structB.h"
typedef struct
{
B b;
}A;
结构B.h:
#pragma once
#include "structA.h"
typedef struct
{
int field;
}B;
void func(A* a);
结构B.c:
#include "structB.h"
void func(A* a)
{
}
在 VC2010 上产生以下错误:
structa.h(7):错误 C2016:C 要求结构或联合具有
至少一个成员 structa.h(7):错误 C2061:语法错误:标识符
'B' 等
因此,由于我在 func(A* a) 中只有一个指向 A 的指针,因此我尝试像这样进行前向声明:
#pragma once
typedef struct A;
typedef struct
{
int field;
}B;
void func(A* a);
我在 structB.c 中添加 #include "structA.h"
但是这不起作用,要修复它,我必须在原型和实现中将 func(A* a) 的参数更改为 func(struct A* a) ...
但在这种情况下,我失去了对我的结构进行类型定义的目的......
我知道我可以简单地将函数移动到另一个文件,但该函数与我的结构相关,所以我想将原型保存在与我的结构相同的文件中。现在也许这不是用 C 做事的好方法,我主要习惯于 C++,所以我倾向于在做 C 时用 C++ 思考,这通常是有问题的......
有人知道解决方法吗?非常感谢你。