Ich habe hier gerade ein merkwürdiges Problem bei der Erweiterung einer Template-Klasse. Ich will die bestehende Klasse Polyhedron_3 um eine std::multimap und einige Methoden erweitern. Aus irgendeinem Grund werden aber Typdefinitionen nicht richtig mit vererbt. Ich brauche unter anderem den Typ Facet_handle aus der Oberklasse.
Fragen: 1. Muss ich wirklich sämtliche Typen aus der Oberklasse erneut via typedef angeben? Nicht das Problem, aber eigentlich sollten die Typen doch auch so übernommen werden. Funktioniert das nur bei Nicht-Template-Klassen?
2. Wieso kriege ich die folgende Fehlermeldung:
Code:
./cgal.h:85: error: type ‘std::multimap<unsigned int, typename CGAL::Polyhedron_3<Traits, CGAL::Custom_Polyhedron_items_3, CGAL::HalfedgeDS_default, std::allocator<int> >::Facet_handle, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, typename CGAL::Polyhedron_3<Traits, CGAL::Custom_Polyhedron_items_3, CGAL::HalfedgeDS_default, std::allocator<int> >::Facet_handle> > >’ is not derived from type ‘CGAL::Custom_Polyhedron_3<Traits>’
Ich meine es ist offensichtlich das die multimap nicht von Custom_Polyhedron_3 erbt, aber wieso ist das ein Problem?
Hier der gekürzte Code:
Code:
/** extend Polyhedron_3 with a multimap that keeps track of face IDs. */ template <class Traits> class Custom_Polyhedron_3 : public Polyhedron_3<Traits, Custom_Polyhedron_items_3> { public: typedef Polyhedron_3<Traits, Custom_Polyhedron_items_3> Parent; typedef typename Parent::Facet_handle Facet_handle; typedef typename Parent::Facet_const_handle Facet_const_handle;
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Die Typedefs bleiben erhalten und sind auch in ableitungen erreichbar, bei dir scheint ledeglich das Problem zu sein, dass du durch die templates noch typename mit angeben musst. Sobald du ein Teil eines Templates in einem Template nutzt musst du typename verwenden, damit der compiler erstmal das eine template erzeugt und dann das, wo das Template genutzt werden soll. Sonnst kann der compiler nicht weiter machen, da der Datentyp noch unbekannt wäre und kann entsprechend auch nicht auf elemente des Templates zugreifen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.