所以,假设我有一个名为Lights的超类。然后我有两个扩展Lights,Light_Omni和Light_Spot的子类。在Lights中是否可以使用Light_Omni和Light_Spot对象?
我尝试在Lights.h中声明子类的声明,因为我在某处阅读,因为与我的情况不同,它虽然相似。但我要么做错了,要么就是行不通。
class LG_Light_Spot;
class LG_Light_Omni;
class LG_Lights
{
LG_Light_Spot obj1;
LG_Light_Omni obj2;
};
class LG_Light_Spot :
public LG_Lights
{};
class LG_Light_Omni :
public LG_Lights
{};
现在,当我尝试构建项目时,我正在获得“未解析的外部”。 希望这不是一个愚蠢的问题。
答案 0 :(得分:1)
不,这是不可能的。定义将是递归的; LG_Lights
的大小是多少?
出于同样的原因,你也不能拥有struct A { A obj; };
。
答案 1 :(得分:0)
要扩展LRiO的答案,请记住,派生类的每个实例都包含一个基础子对象,它是基类的实例(或子对象/类,如果有多个)。
因此,您要求LG_Lights
包含LG_Light_Spot
作为成员子对象,其中包含LG_Lights
作为基础子对象,其中包含LG_Light_Spot
作为成员子对象。 ..它的乌龟一路下来。
在某些时候,您需要将此包含设为可选,为此std::unique_ptr<DerivedClass>
可以正常工作。
否则你需要重新考虑你的继承。聚光灯是一种光是有意义的。但是你说聚光灯是一种轻盈的 s ,复数。不是在现实世界中,而是在C ++类型系统中。