Compiler findet Methode nicht
-
Hallo,
ich habe folgende Methode:
virtual void setPositionUpdater(Positionable* pos );und folgende Klassen: Positionable, Camera und ViewerBase. ViewerBase erbt von Camera und Camera erbt von Positionable.
Seltsamerweise liefert mir nun der folgende Code:
void WS3D::setCamera(ViewerBase* viewBase) { if(mWS3D) mWS3D->setPositionUpdater(viewBase); }diesen Compilerfehler:
WS3D.cc:121: error: no matching function for call to ‘fx::WS3D::setPositionUpdater(ggfx::ViewerBase*&)’
../Lib/Linux_x86_64_SuSE11.2/Framework/include/fx/Positionable.h:66: note: candidates are: virtual void vig::Positionable::setPositionUpdater(fx::Positionable*)ViewerBase ist doch eine Subklasse von Positionable. Wieso funktioniert das nicht?

-
Du musst die Frage auch so stellen, dass man sie beantworten kann. So gibt es zuwenig Informationen.
-
Ich glaube das Problem ist recht simpel, es wird keine implizite Konvertierung für die Klasse durchgeführt, da für seinen Fall zwei gemacht werden müssten. Somit wiß der Compiler nicht was er mit dem Funktionsaufruf anfangen soll. Helf ihm und konvertiere es explizit.
-
Frager2 schrieb:
ViewerBase ist doch eine Subklasse von Positionable. Wieso funktioniert das nicht?

Weiß das der Compiler auch an der Stelle, sprich ist die Klassendeklaration von ViewerBase sichtbar?
-
manni66 schrieb:
Frager2 schrieb:
ViewerBase ist doch eine Subklasse von Positionable. Wieso funktioniert das nicht?

Weiß das der Compiler auch an der Stelle, sprich ist die Klassendeklaration von ViewerBase sichtbar?
<krümelkack>Du meinst die Klassendefinition.</krümelkack>
-
krümelkacker schrieb:
manni66 schrieb:
Frager2 schrieb:
ViewerBase ist doch eine Subklasse von Positionable. Wieso funktioniert das nicht?

Weiß das der Compiler auch an der Stelle, sprich ist die Klassendeklaration von ViewerBase sichtbar?
<krümelkack>Du meinst die Klassendefinition.</krümelkack>
Tja, das trifft wohl beides zu:
Bjarne Stroustrup, The C++ Programmimg Language, Seite 225 schrieb:
For historical reasons, a class definition is often referred to as a class declaration.
Bin halt schon was älter

-
Manni66 schrieb:
Tja, das trifft wohl beides zu:
Bjarne Stroustrup, The C++ Programmimg Language, Seite 225 schrieb:
For historical reasons, a class definition is often referred to as a class declaration.
Bin halt schon was älter

Dass es oft so genannt wird, heißt nicht, dass es richtig ist (bzw. "zutrifft"). Es bedeutet vielmehr, dass sich viele Leute oft ungenau ausdrücken. Leider auch gerne dann wenn eine genaue Ausdrucksweise nötig ist.
-
pumuckl schrieb:
Manni66 schrieb:
Tja, das trifft wohl beides zu:
Bjarne Stroustrup, The C++ Programmimg Language, Seite 225 schrieb:
For historical reasons, a class definition is often referred to as a class declaration.
Bin halt schon was älter

Dass es oft so genannt wird, heißt nicht, dass es richtig ist (bzw. "zutrifft"). Es bedeutet vielmehr, dass sich viele Leute oft ungenau ausdrücken. Leider auch gerne dann wenn eine genaue Ausdrucksweise nötig ist.
Dieser Aussage würde ich nicht zustimmen.