1

所以我更有可能在 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++ 思考,这通常是有问题的......

有人知道解决方法吗?非常感谢你。

4

1 回答 1

2
typedef struct structA;

这甚至是如何编译的?-- 正确:

typedef struct A A;
于 2012-06-15T04:32:40.553 回答