You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++报错:类重定义问题咨询——自定义Day结构体代码排查

排查C++ "redefinition of Class" 编译错误

先看你提供的Day.h头文件,第一眼就发现了头文件保护宏的名字不匹配——这是导致重复定义错误的核心原因:

  • 你写的是 #ifndef _Day_h,但后面的#define却是 _Day_h_(多了一个下划线)
  • 这种情况下,头文件守卫完全不起作用,当代码多次包含Day.h时,就会重复定义Day结构体,触发编译错误

修复步骤:

  1. 统一头文件保护的宏名称,把#define _Day_h_改成#define _Day_h(或者反过来,只要前后一致即可),修正后的头文件守卫部分如下:

    #ifndef _Day_h
    #define _Day_h
    // ... 你的结构体定义内容
    #endif
    
  2. 另外补充个小知识点:在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
    
  3. 最后检查你的cpp文件,确保没有重复定义Day结构体的代码,比如不要在cpp里又写一遍struct Day的完整定义。

按照上面的步骤修改后,应该就能解决这个重复定义的编译错误了。

内容的提问来源于stack exchange,提问作者yan liang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:51:44