error C2011: 'MIMainInfo' : 'struct' type redefinition错误分析

首先利用一个最简单的工程重现了该问题

文件 MInfo.h

内容如下:

源代码typedef struct MIMainInfo
{
	int					m_bAppStart;

}MIMainInfo;


 

文件 pubdef.h

内容如下:

源代码#include "MInfo.h"
typedef struct 	MIMainInfo				MIMainInfo;


 

文件 funtest.c

源代码#include "pubdef.h"
#include "MInfo.h"

void test1(MIMainInfo * mi)
{
	int i = -1;
	return;
}

编译该工程,提示错误 error C2011: 'MIMainInfo' : 'struct' type redefinition

 

解决方法1:

去除文件 pubdef.h中的头文件,编译通过,执行通过

解决方法2:

去除文件 funtest.c中的头文件 #include "MInfo.h" ,编译通过,执行通过

解决方法3:

去除文件 funtest.c中的头文件 #include "pubdef.h" ,编译通过,执行通过

解决方法4:

文件 MInfo.h添加代码

源代码#pragma once

编译通过,执行通过。

 

问题分析:

首先可以看一个详细解释的链接http://en.wikipedia.org/wiki/Pragma_once

自己的想法:

     编译无法通过是在文件 funtest.c中,因为头文件包含了MIMainInfo的原始定义和通过typedef关键字实现的定义,两个定义自然会出现重复定义的错误。上面的链接中的例子是通过函数的重复定义说明的,只是简单的包含了两次头文件就出现了重复定义的错误。

解决方法1、2和3会导致c文件中只包含了一个定义,自然可以解决问题,方法4通过检查重复包含,使得最后文件中包含了一个定义,也解决了问题。

总结:一个文件中只能可以同时出现多个 typedef struct MIMainInfo MIMainInfo;  ,但是不能同时出现两个结构定义。

转载于:https://www.cnblogs.com/ssor/archive/2010/09/19/1830908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值