我希望你能解决以下问题。 我正在尝试创建一个灵活的接口系统并遇到问题。 这是相关的代码:
// Interface 1
// this: virtual f_a
// -> abstract
struct I_A abstract
{
virtual void f_a() = 0;
};
// Interface 2
// I_A : virtual f_a
// this: virtual f_b
// -> abstract
struct I_B abstract : public I_A
{
virtual void f_b() = 0;
};
// Implementation 1
// I_A : virtual f_a
// zhis: defines f_a
// -> not abstract
struct S_A : public I_A
{
virtual void f_a() {}
};
// Implementation 2
// I_B : virtual f_a
// I_B : virtual f_b
// S_A : defines f_a
// this: defines f_b
// -> not abstract
struct S_B : public I_B, public S_A
{
virtual void f_b() {}
};
我无法实例化S_B,因为编译器声明它是抽象的。 有什么问题?
答案 0 :(得分:0)
您需要在此处使用虚拟继承:
struct I_A
{
virtual void f_a() = 0;
};
struct I_B : virtual public I_A
{
virtual void f_b() = 0;
};
struct S_A : virtual public I_A
{
virtual void f_a() {}
};
注1:我忽略了类声明中的abstract
语句,因为它不是标准的C ++。
注2:此here有重复内容,您可以在其中找到解释原因的原因。