Fehler "Ungültiger kovarianter Rückgabetyp" in verschachtelten Klassen mit Methoden, die vorlagenbasierte Objekte zurückgeben

Der folgende C ++ - Code gibt mir diese Fehler beim Kompilieren:

covariant.cpp:32:22: error: invalid covariant return type for ‘virtual Q<B> C::test()’
covariant.cpp:22:22: error:   overriding ‘virtual Q<A> B::test()’

Ich möchte die Zeile nicht ändernvirtual Q<B> test() {} zuvirtual Q<A> test() {} obwohl es die Kompilierungsfehler beseitigt. Gibt es einen anderen Weg, um dieses Problem zu lösen?

template <class T>
class Q
{
    public:
        Q() {}
        virtual ~Q() {}
};

class A
{
    public:
        A() {}
        virtual ~A() {}    
};

class B
{
    public:
        B() {}
        virtual ~B() {}

        virtual Q<A> test() = 0;

};

class C : public B
{
    public:
        C() {}
        virtual ~C() {}

        virtual Q<B> test() {}
};

Antworten auf die Frage(3)

Ihre Antwort auf die Frage