Vererbung einer Funktion in einer Template-Klasse
-
Hallo,
ich habe folgendes Problem:
Ich habe eine Oberklasse base mit einem Template-Parameter in der ich eine Funktion deklariere (dosomething ()). In der Unterklasse derived, die public von base erbt, möchte ich diese Funktion definieren und dabei auf gechützte Member der Oberklasse zugreifen.Aus irgendeinem Grund funktioniert das nicht und ich bin ratlos warum. Ohne Template funktioniert alles einwandfrei.
#include <iostream> using namespace std; template <int dim> class base { protected: int i, j; virtual void dosomething (); public: void set (int a, int b) { i = a; j = b; } void show () { cout << i << " " << j << endl; } }; template <int dim> class derived : public base<dim> { protected: int k; void dosomething () { cout << i*j << endl; } public: void setk (){k = i*j; } void showk () {cout << k << endl; dosomething(); } }; int main () { derived<2> ob; ob.set(2,3); ob.show (); ob.setk(); ob.showk(); return 0; }Mein Compiler meckert:
test.cc: In Elementfunktion »void derived<dim>::dosomething()«: test.cc:22:32: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert test.cc:22:34: Fehler: »j« wurde in diesem Gültigkeitsbereich nicht definiert test.cc: In Elementfunktion »void derived<dim>::setk()«: test.cc:25:19: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert test.cc:25:21: Fehler: »j« wurde in diesem Gültigkeitsbereich nicht definiert
-
Häufiges Problem bei Templates mit Vererbung. Daher spare ich mir eine eigene Antwort und verweise auf:
http://www.parashift.com/c++-faq-lite/nondependent-name-lookup-members.html
-
Danke, funktioniert alles!