所以我更有可能在C语言中遇到交叉引用问题
你好,(不知什么原因,我不能先写下来)
基本代码:
结构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上产生以下错误:
结构h(7):错误C2016:C要求结构或联合具有
至少一个成员structa.h(7):错误C2061:语法错误:标识符
“B”等
因此,由于我只有一个指向in func(a*a)的指针,所以我尝试执行如下转发声明:
#pragma once

typedef struct A;

typedef struct
{
    int field;
}B;

void func(A* a);

我在structB.c中添加了“structA.h”
但是这不起作用,要修复它,我必须在原型和实现中将func(A*A)的参数更改为func(struct A*A)。。。
但在这种情况下,我失去了对结构进行类型定义的目的。。。
我知道我可以简单地将函数移到另一个文件中,但是该函数与我的结构相关,所以我希望将原型保存在与结构相同的文件中。
现在也许这不是一个很好的方法来做C的事情,我主要习惯于C++,所以我倾向于在C++中思考当C语言经常是有问题的…
有人知道解决办法吗?非常感谢你。

最佳答案

typedef struct structA;

这是怎么编译的?--正确:
typedef struct A A;

关于c - C结构/函数交叉引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11044600/

10-11 22:12
查看更多