【发布时间】:2012-06-15 04:29:17
【问题描述】:
所以我更有可能在 C 中遇到交叉引用问题
你好,(由于某种原因我不能先写出来)
基本上是这段代码:
structA.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);
structB.c:
#include "structB.h"
void func(A* a)
{
}
在VC2010上产生以下错误:
structa.h(7):错误 C2016:C 要求结构或联合具有 at
至少一个成员 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++ 思考,这通常是有问题的......
有人知道解决方法吗?非常感谢。
【问题讨论】:
-
有什么问题?
func采用指向A的指针。它可以在structA.h。为什么要强制它进入structB.h?从您发布的内容来看,structA.h似乎更有意义。也许如果您使用实际名称而不是诸如structA和structB之类的虚构名称,那么您要做什么会更明显? -
基本上在我的例子中,B 代表一个玩家,func 用于 updatePlayer(),它需要一个 Game (A) 指针,该指针包含一些用于更新玩家的有用信息,并持有 Game 结构一个玩家。
标签: c function reference struct param