S13161 2022-07-26 09:59 采纳率: 66.7%
浏览 99
已结题

C2079未定义的类问题

假设有以下的文件:
element.h

class element_list;
class element{
  element_list  subelements;
  //......
}

element.cpp

#include "element.h"
#include "element_list.h"
//.....

element_list.h

#include "element.h"
class element_list{
//...
  std::list<element> subs;
}

当必须存在class element与class element_list时,且这两个类互相包含以对方为类型的成员时,用以上的编程方法会造成C2079问题(使用了未定义的class “element_list” , 在文件element.h中)
那么,该怎么避免这样的问题?
(当然我不想用指针,除非指针是唯一解决办法)
(我想过Impl,但是如果其中一个类的返回值是未定义的类呢?)
(我也想过将element_list改为template,并在模板中传入类型element,但是如果这个模板还需要一个参数,且此参数必须继承于element呢?)

  • 写回答

2条回答 默认 最新

  • bostonAlen 2022-07-26 11:35
    关注

    只能用指针和模板,甚至引用都可以。
    指针能确定大小,引用不占用空间,而模板是代码延迟生成机制,所以都是解决方法。
    类(和结构体)是不能相互包含的,原因是类在定义的时候需要知道类的大小,实例化的时候才可以正确分配空间。
    假如类A正常定义,类B中有类A,这也是OK的,因为类A大小已知,类B大小也就已知了。
    假如A中有B,B中有A呢?A和B都不确定大小,好像进入了一个类似死锁的情景。
    A和B都不知道自己实例化对象的时候到底申请多少空间。
    同样结构体也是一样,是不可以相互包含的!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 修改了问题 7月26日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗