Pointer auf abgeleitete Klasse
-
Hi,
ich habe eine Funktion, die ein Pointer auf vtkDataObject erwartet. Ich rufe die Funktion mit einem Pointer auf vtkDataSet. vtkDataSet ist von vtkDataObject abgeleitet. Dann sollte das doch gehen, oder?
Ich bekomme folgenden Fehler:
hvs2ens.cpp:192: error: no matching function for call to `
vtkXMLUnstructuredGridWriter::SetInput(main()::vtkDataSet*)'
/home/ry149/local/include/vtk/vtk-5.0/vtkXMLWriter.h:129: error: candidates
are: void vtkXMLWriter::SetInput(vtkDataObject*)
/home/ry149/local/include/vtk/vtk-5.0/vtkXMLWriter.h:130: error:
void vtkXMLWriter::SetInput(int, vtkDataObject*)So rufe ich die Funktion auf:
_xml_grid_writer->SetInput(_grid_reader->GetOutput());Die Deklaration der Klasse vtkDataSet sieht so aus:
class vtkDataSet : public vtkDataObject { // ... };Hat jemand eine Idee?
Gruss, K.B.
-
main()::vtkDataSet*
Wo hast du denn die Klasse definiert?
-
Du musst den Pointer Casten, am besten mit
DynamicCast<vtkDataObject>(pDataSet);
-
1310-Logik schrieb:
Du musst den Pointer Casten, am besten mit
DynamicCast<vtkDataObject>(pDataSet);Wieso das?
DataObject erbt doch von vtkDataSet und ist damit schon implizit konvertierbar. Da das nicht zu funktionieren scheint erreichst Du mit dem cast nur, daß der Compiler es zwar frißt, aber zur Laufzeit möglicherweise merkwürdige Dinge passieren.
-
Aehm ja sorry..
ich habs umgekehrt verstanden.
ein pointer der basisklasse kann man so doch auf die abgeleitete klasse casten oder?DynamicCast<pDerived>(pBase);
-
@CStoll: wo main()::vtkDataSet* verstehe ich auch nicht.
_grid_reader ist vtkPDataSetReader* und lauf Referenz ist vtkPDataSetReader::GetOutput() vom Typ vtkDataSet* (siehe http://www.vtk.org/doc/release/5.0/html/a00892.html).Hmmm...
Gruss, K.B.
-
Kannst Du mal ein vollständiges Minimalbeispiel konstruieren, das den Fehler noch aufzeigt?
@1310-Logik, ja, der downcast funktioniert. Allerdings sollte man das Ergebnis noch prüfen, zudem muß rtti eingeschaltet sein.
-
Alles hat sich in Wohlgefallen aufgelöst ... der Code war in Ordnung. Ich hab alles komplett neu kompiliert, jetzt gehts.
Makefiles make me sad
Danke für Eure Hilfe,
Gruss, K.B.
-
1310-Logik schrieb:
ein pointer der basisklasse kann man so doch auf die abgeleitete klasse casten oder?
DynamicCast<pDerived>(pBase);Nein, das kann man höchstens mit dynamic_cast.
Manchmal reicht aber auch static_cast schon aus. Wenn man sich zB sicher ist, dass es genau die entsprechende abgeleitete Klasse ist, weil das Design der Anwendung gar nichts anderes zulässt.
-
groovemaster schrieb:
1310-Logik schrieb:
ein pointer der basisklasse kann man so doch auf die abgeleitete klasse casten oder?
DynamicCast<pDerived>(pBase);Nein, das kann man höchstens mit dynamic_cast.
Manchmal reicht aber auch static_cast schon aus. Wenn man sich zB sicher ist, dass es genau die entsprechende abgeleitete Klasse ist, weil das Design der Anwendung gar nichts anderes zulässt.huch peinlich
naja das kommt weil ichs nicht wirklich oft brauch
ich halt halt nichts von casting shows
