Вы используете абстрактные классы в качестве указателя и ссылок, поэтому вы должны сделать
class AnotherClass
{
struct DeriveInterface : public Interface
{
void something() {}
}
DeriveInterface m_intf;
Interface &interface() const
{
return m_intf;
}
}
struct Usage : public AnotherClass
{
void called()
{
Interface &i = interface();
}
}
плюс пару точек с запятой, и все будет работать нормально.Обратите внимание, что только указатели и ссылки полиморфны в C ++, поэтому, даже если Interface
не были абстрактными, код был бы неправильным из-за так называемой нарезки.
struct Base { virtual int f(); }
struct Der: public Base {
int f(); // override
};
...
Der d;
Base b=d; // this object will only have B's behaviour, b.f() would not call Der::f