[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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage