Multi-Level Vererbung
-
Hi miteinander
Folgende Klassenhierarchie:
class ApplicationHelper: public Object { public: // ... virtual Ptr<Application> Install(const Ptr<Node> &) const; Ptr<Application> Install(const std::string &) const; ApplicationContainer Install(const NodeContainer &) const; // ... };class TrafficGeneratorHelper: public ApplicationHelper { // ... };class VoipTrafficGeneratorHelper: public TrafficGeneratorHelper { public: // ... virtual Ptr<Application> Install(const Ptr<Node> &) const; // ... };Möchte ich nun Install auf einen NodeContainer ausführen mit einem VoipTrafficGeneratorHelper, etwa so:
VoipTrafficGeneratorHelper voipHelper; NodeContainer container; voipHelper.Install(container);So erhalte ich folgende Fehlermeldung:
../src/tragic-test.cc: In static member function `static void TragicTest::test3GroupsCsmaNetwork()': ../src/tragic-test.cc:44: error: no matching function for call to `ns3::VoipTrafficGeneratorHelper::Install(ns3::NodeContainer&)' c:/Program Files/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/tragic/traffic-generator/voip-traffic-generator-helper.h:18: note: candidates are: virtual ns3::Ptr<ns3::Application> ns3::VoipTrafficGeneratorHelper::Install(const ns3::Ptr<ns3::Node>&) const mingw32-make: *** [src/tragic-test.o] Error 1Caste ich das Ding vorher zu einem ApplicationHelper, also:
VoipTrafficGeneratorHelper voipHelper; NodeContainer container; static_cast<ApplicationHelper *> (&voipHelper)->Install(container);Funktioniert es wiederum problemlos. Was also, frage ich mich, muss ich tun um die geerbte Methode einfach so aufrufen zu können?
TrafficGeneratorHelper helper; NodeContainer container; helper.Install(container);Klappt übrigens ebenfalls problemlos.
Besten Dank schon im Voraus und freundliche Grüsse
Kessi
-
Mit der Deklaration in der abgeleiteten Klasse verdeckst du die gleichnamigen Funktionen in Basisklassen. Mittels
usinginnerhalb der Klassendefinition kannst du diese explizit wieder sichtbar machen:using ApplicationHelper::Install;
-
Funktioniert perfekt
.Danke für die rasche Antwort und gute n8
