Function aus abgeleiteter Klasse wird nicht gefunden
-
Ich habe folgendes Konstrukt:
class FitFunctionTemplate: public QThread { ... protected: virtual double value(double x, std::vector<double>& values) = 0; public: double value(double x); };double FitFunctionTemplate::value(double x) { return value(x, resultingFitParameters()); }class FitLinear: public FitFunctionTemplate, public GenFunction { ... public: double value(double x, std::vector<double>& values); };Eine Objekt fit abgleitet von FitLinear sollte also immer über die Funktion "value(x)" verfügen, muss selbst aber die allgemeinere Funktion "value(double x, std::vector<double>& values)" zur Verfügung stellen.
Das ganze lässt sich für jede einzelne Klasse kompilieren. Aber wenn ich auf value(x) zugreifen will, dann wird dies nicht gefunden.
Also:
FitLinear fit; ... double y = fit.value(x);liefert den Fehler
error C2660: 'FitLinear::value': Funktion akzeptiert keine 1 Argumente
warum aber wird diese Funktion nicht gefunden?
Matthias
-
pospiech schrieb:
Aber wenn ich auf value(x) zugreifen will, dann wird dies nicht gefunden.
warum aber wird diese Funktion nicht gefunden?
Weil die Überschreibung der virtuellen Funktion, die anderen geerbten Funktionen gleichen Namens verdeckt. Behebbar mittels using-Deklaration. Allerdings auch ein guter Grund, von öffentlich virtuellen Funktionen Abstand zu nehmen:
class FitFunctionTemplate: public QThread { ... private: virtual double value_impl(double x, std::vector<double>& values) = 0; public: double value(double x); double value(double x, std::vector<double>& values) { return value_impl( x, values ); } };Die Überschreibung von value_impl beeinflusst hier nicht die Sichtbarkeit anderer Schnittstellenfunktionen.