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呢?)

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


可以看下cpp参考手册中的 c++-未定义行为