【问题标题】:Define class with fields from the type of the class使用类类型中的字段定义类
【发布时间】:2018-12-23 09:41:59
【问题描述】:

谁能解释一下为什么我不能这样定义:

Class A {  
A a;
//...
};

但我可以这样定义:

Class A {  
std::vector<A> vec;
//...
};

允许第二个有什么区别?

【问题讨论】:

  • 尝试计算类A的对象的大小(提示vector通常只存储几个指针)
  • 第二个在标准 C++ 中也是不允许的。
  • @juanchopanza 为什么会这样?
  • @juanchopanza 类似于Class A { A* somePtr; }
  • @Guinzoo 除了标准说拥有不完整类型的容器是未定义的行为。除非在 c++17 中改变。

标签: c++ class c++11 vector


【解决方案1】:

你不能使用第一个,因为它是递归的,即对象A包含对象A,你可以使用第二个,因为vector不包含对象A而是指向对象A的指针。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 2013-12-15
    • 2018-09-12
    • 1970-01-01
    • 2018-11-03
    • 2011-03-21
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多