我有两个.h文件和一个.c文件,如下所示
typedef struct mode_info_t_ mode_info_t;
struct common {
int create;
mode_info_t *mode_info;
};
typedef struct mode_info_t_ {
int primary;
int secondary;
} mode_info_t;
#include "a.h"
#include "b.h"
-----
编译.c时,它会抛出错误 -
b.h:17:错误:重新定义typedef'mode_info_t'
a.h:50:错误:先前'mode_info_t'的声明在这里
这里的专家怎么了?
答案 0 :(得分:0)
你有你的b.h
typedef struct mode_info_t_ {
int primary;
int secondary;
}mode_info_t;
然后a.h
struct common {
int create;
mode_info_t *mode_info;
};
在你的main.c中只包括b.h
#include "b.h"
#include "a.h"
int main()
{
}
答案 1 :(得分:0)
当我编译你给出的代码片段时,我没有收到任何错误和警告。你能告诉我们你的完整代码吗?可以声明一个结构,之后你可以定义它。
typedef struct Node Node;
struct Node {
int data;
Node *nextptr;
};
你在做同样的事情。所以这不是一个错误。你可能在某个地方处理不当。
答案 2 :(得分:0)
将b.h更改为:
struct mode_info_t_ {
int primary;
int secondary;
};
如果你需要b.h中的typedef,请将b.h包含在a.h中。如果你不想让b.h包含a.h但仍需要typedef,那么从a.h中取出typedef并将其放在c.h中,并使a.h和b.h都包含c.h。
在我将所有前向声明放在一个单独的标题中之前,我实际上已经这样做了,只是为了避免在不完全合适时需要包含彼此的各种标题。