[C ++] Covariante Rückgabetypen
Ich habe einVectorN
Klasse und einVector3
Klasse geerbt vonVectorN
(das zum Beispiel Querprodukte verarbeiten kann). Ich habe Probleme, die Rückgabetypen der verschiedenen Operatoren zu bestimmen. Beispiel
class VectorN
{
public:
VectorN(){};
virtual VectorN operator*(const double& d) {.....};
std::vector<double> coords;
};
class Vector3 : public VectorN
{
public:
Vector3(){};
virtual Vector3 operator*(const double& d) {....};
};
Dieses Beispiel erzeugt einen C2555-Fehler:
'Vector3 :: operator *': Überschreiben des Rückgabetyps der virtuellen Funktion unterscheidet sich und ist nicht kovariant von 'VectorN :: operator *', siehe Deklaration von 'VectorN :: operator *'.
Das Problem ist, dass ich keinen Verweis auf ein @ zurückgeVector3
, und dass dasVector3
Klasse ist bei der Deklaration des @ nicht vollständig definieoperator*
. Ich möchte jedoch meinoperator*
um virtuell zu sein, und ich möchte ein @ zurückgebVector3
wenn ich ein @ multiplizieVector3
mit einer Konstante (ansonsten, wenn ich(Vector3*double).crossProduct(Vector3)
, es würde einen Fehler zurückgeben).
Was kann ich tun
Vielen Dank