我的情况是我有两个类,一个接口和一个使用这两个类的实现。
class A : public virtual Interface<T>
class B : public virtual Interface<T>
class B
在内部使用class A
,这是不允许的,因为class A
是公共虚拟接口的派生类。我收到以下错误:error: cannot declare variable ‘a’ to be of abstract type ‘A’
有没有办法在不为A
创建新类的情况下执行以下操作?
class Interface
{
virtual void foo() = 0;
virtual void bar() = 0;
};
class A : public virtual Interface
{
public:
void foo(){ }
};
class B : public virtual Interface
{
public:
void bar()
{
A a;
}
};
class Implementation: public A, public B
{
public:
Implementation()
{
}
};
int main(){
Implementation impl;
return 0;
}
答案 0 :(得分:4)
不,你不能实例化A,因为它没有实现Interface中的所有纯虚函数。
以下适用于我。
class Interface
{
virtual void foo() = 0;
virtual void bar() = 0;
public:
virtual ~Interface() {}
};
class A : public virtual Interface
{
public:
void foo() override {}
void bar() override {}
};
class B : public virtual Interface
{
public:
void foo() override {}
void bar() override
{
A a;
}
};
class Implementation : public A, public B
{
public:
void foo() override { A::foo(); }
void bar() override { B::bar(); }
};
int main()
{
Implementation impl;
return 0;
}