【发布时间】:2019-01-16 22:56:06
【问题描述】:
我有以下一组以网格方式相互继承的类。在顶层,我有抽象类。 Abstract_Class_B 和 Abstract_Class_C 都继承自 Abstract_Class_A。
在第二级继承中,我有这些类的确切实现。
-
Impl_Class_A继承自Abstract_Class_A。 -
Impl_Class_B继承自Abstract_Class_B和Impl_Class_A。 -
Impl_Class_C继承自Abstract_Class_C和Impl_Class_A。
当我编译下面的代码时,如果我没有在代码中声明任何类,编译器就可以完美编译。但是当我开始在第二级声明指向类的指针时,编译器给出了以下错误:
undefined reference to `VTT for ns3::Impl_Class_B'
undefined reference to `vtable for ns3::Impl_Class_B'
我使用virtual 来解决继承中典型的菱形问题,但我仍然无法编译。由于这种继承方式,编译器会感到困惑是有道理的。但是我的系统需要对这些类进行这样的设计。有什么办法可以解决这个问题?
代码:
// Top Level (Level 1)
class Abstract_Class_A
{
};
class Abstract_Class_B: virtual public Abstract_Class_A
{
public:
uint8_t type;
};
class Abstract_Class_C: virtual public Abstract_Class_A
{
};
// Second Level (Level 2)
class Impl_Class_A : virtual public Abstract_Class_A
{
public:
double angle;
};
class Impl_Class_B: virtual public Abstract_Class_B, Impl_Class_A
{
};
class Impl_Class_C: virtual public Abstract_Class_C, Impl_Class_A
{
};
void test()
{
Impl_Class_B* test = new Impl_Class_B ();
}
【问题讨论】:
-
我不知道为什么我得到-1,如果有不清楚的地方,至少这样做的人应该说明原因
-
我无法重现您的问题。您正在使用哪些编译器/编译器选项?
标签: c++ inheritance