说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在工程中加入自定义的结构,编译出现错误!

编辑:说三道四文库 发布时间:2018-01-24 05:42
HTML文档下载 WORD文档下载 PDF文档下载
//DataStruct.h
///////////////////////////////////////////
typedef struct tagDATA
{
CString strGrade;
CString strClass;
CString strLessons[7][12];
}DATA;

///////////////////////////////////////////

typedef struct tagEXTRADATA
{
CString strTeacherName;
CString strLesson;
CString strClass;
}EXTRADATA;

//////////////////////////////////////////
错误提示如下:
error C2011: 'tagDATA' : 'struct' type redefinition
error C2011: 'tagEXTRADATA' : 'struct' type redefinition

请问是怎么回事?
你应该把你的struct放在#if !defined .. #endif 宏之间,就象这样
#if !defined _DataStruct_h
#define _DataStruct_h

typedef struct tagDATA
{
CString strGrade;
CString strClass;
CString strLessons[7][12];
}DATA;

///////////////////////////////////////////

typedef struct tagEXTRADATA
{
CString strTeacherName;
CString strLesson;
CString strClass;
}EXTRADATA;

#endif //_DataStruct_h

谢谢编译成功了,但这是为什么?加入的语句有什么作用?
你先看看编译预处理的东东,再打开stdafx.h 就该明白了
因为你的.cpp文件在包括头文件时,可能会重复包括这个头文件,这样就产生了两次定义,加上上面的#ifdef后,由于刚开始没有定义_DataStruct_h,头文件里的内容被编译到,同时_DataStruct_h被定义,但第二次包括该文件时,因为_DataStruct_h已经定义,所以就直接到#endif了___什么都没干
请问哪里有介绍编译预处理知识?我想看看
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘