C++报错:类重定义问题咨询——自定义Day结构体代码排查
排查C++ "redefinition of Class" 编译错误
先看你提供的Day.h头文件,第一眼就发现了头文件保护宏的名字不匹配——这是导致重复定义错误的核心原因:
- 你写的是
#ifndef _Day_h,但后面的#define却是_Day_h_(多了一个下划线) - 这种情况下,头文件守卫完全不起作用,当代码多次包含
Day.h时,就会重复定义Day结构体,触发编译错误
修复步骤:
统一头文件保护的宏名称,把
#define _Day_h_改成#define _Day_h(或者反过来,只要前后一致即可),修正后的头文件守卫部分如下:#ifndef _Day_h #define _Day_h // ... 你的结构体定义内容 #endif另外补充个小知识点:在C++里不需要
typedef struct这种C语言的写法,直接写struct Day就可以直接用Day作为类型名,简化后的头文件可以改成这样:#ifndef _Day_h #define _Day_h struct Day { int year; int month; int date; void print()const; Day (int y,int m,int d); Day (); Day(const Day& day); void setYear(int y); void setMonth(int m); void setDate(int d); int getYear()const; int getMonth()const; int getDate()const; }; #endif最后检查你的cpp文件,确保没有重复定义
Day结构体的代码,比如不要在cpp里又写一遍struct Day的完整定义。
按照上面的步骤修改后,应该就能解决这个重复定义的编译错误了。
内容的提问来源于stack exchange,提问作者yan liang
相关产品推荐
相关产品推荐

