嵌套的struct 不能在头文件中定义,会出现:error LNK2005: "struct Page1_ExcelDataDetec * p" (?p@@3PAUPage1_ExcelDataDetec@@A) already defined in ShapeAndSizeDetectA.obj。
在C++中即使用#ifndef....#endif,也不能解决这样的问题。经过测试,还是最好采用在头文件中用extern 加上变量定义的声明,然后在.cpp文件中定义该变量来解决问题。
分析问题:每个引用到该头文件的cpp文件会分别生成一个相应的.obj文件,当编译器连接这些obj文件的时候会发现该变量在引用到该变量定义头文件的cpp文件中重复定义就是error LNK2005。
解决方案:
头文件:head.h
#ifndef __HEAD_H__
#define __HEAD_H__
typedef struct MAIDI
{
int i;
}MAIDI;
extern MAIDI MM;
#endif //__HEAD_H_
源文件中:source.cpp
#include "head.h"
MAIDI MM;
这样,在所有引用到head.h的源文件中不会出现重复定义的问题。也适合其他出现error LNK2005 的类型重定义问题。