创建类对象时遇Error C2011: 'dateType'类重定义错误求助
嘿,这个Error C2011 'dateType': 'class' type redefinition错误我太熟了——本质就是编译器看到dateType类被重复定义了,咱们一步步来排查:
头文件缺少包含保护
这是最常见的原因!如果你的dateType.h被多个源文件(比如main.cpp和dateType.cpp)包含,每次包含都会重新解析类定义,导致编译器认为你定义了两次dateType。解决方法是给头文件加上头文件守卫:#ifndef DATETYPE_H #define DATETYPE_H // 这里放你的dateType类定义代码 #endif // DATETYPE_H或者更简洁的
#pragma once(目前主流编译器都支持,比如MSVC、GCC、Clang),直接加在dateType.h的第一行就行。类定义被重复写在多个文件里
记住一个规则:类的完整定义应该只出现在头文件(.h)里,源文件(.cpp)只负责实现成员函数。检查一下dateType.cpp或者其他.cpp文件里,是不是不小心又写了一遍class dateType { ... };的代码?如果有,删掉重复的定义,只保留头文件里的版本。项目中存在重复的头文件
有时候会不小心把同一个dateType.h添加到项目的多个目录下,或者项目里有两个名字相同但内容不同的头文件。去你的项目文件列表里搜一下dateType.h,看看是不是有重复的条目,删掉多余的那个。预处理器宏冲突
有没有可能你在某个地方定义了和类名重名的宏?比如如果之前写过#define dateType 2024这种代码,预处理器会把所有dateType替换成2024,导致类定义完全混乱,进而触发重定义错误。全局搜索项目里的#define dateType,如果找到就删掉或者改名。
如果按上面的步骤排查完还是没解决,可以把dateType.h和dateType.cpp的关键代码贴出来,我帮你再细致分析~
内容的提问来源于stack exchange,提问作者Grabinuo

