Einfachvererbung kann auf Methoden nicht zugreifen
-
Hallo habe mal 2 Frage:
1. Frage: Ich habe eine Klasse A geschrieben und B erbt public von dieser Klasse.
Die Methoden die ich in B aus A aufrufen möchte sind in A public.
Wenn ich diese Methode aufrufe meldet der Compiler einen Fehler und zwar:"Unzulaessiger Aufruf einer nichtstatischen Member-Funktion"
wie kann ich das lösen?
class A { public: vector<int>& get_cluster( int i ) { return Matrix[i]; } //... private: //... protected: vector<vector<int> Matrix; }; class B : private A { public: res (const char*); ~res(); verbiete(vector<int>&, vector<int>&, int ) //... private: //... };
die Implementierung in B sieht so aus:
int verbiete(vector<int>& Vec_1, vector<int>& Vec_2, int k) { for(vector<int>::iterator iter=Vec_1.begin();iter<Vec_1.end();++iter) { //schreibe die Matrix Zeilenweise in hilfsVec und verändere die Einträge in der //Zeile vector<int>& hilfsVec=A::get_cluster(*iter); for(int j=0;j<Vec_2.size();++j) hilfsVec[Vec_2[j]]=k; } }
das Problem liegt an A::get_cluster(int).
2. Frage: wie kann ich eigentlich eine Matrix (vector<vector<int> >)die in A definiert und eingelesen wird in B verändern?
gibt es da eine elegantere Realisierung, als ich sie gemacht habe?
Mit Zeigern etc.
-
Hallo
1. las da A:: weg, das brauchst du in diesem Fall nicht.
2. mit Zeigern oder referenzen. Das heißt du hast das schon richtig gemacht.
bis bald
akari
-
wenn ich A:: weglasse meldet er einen Fehler:
"nichtdeklarierter Bezeichner"
-
Hallo
du must die Funktion für die Klasse implementieren :
int B::verbiete(...) { }
bis bald
akari
-
Zentaur schrieb:
wenn ich A:: weglasse meldet er einen Fehler:
"nichtdeklarierter Bezeichner"
Versuch's mal so
[cpp]
int **B::**verbiete(vector<int>& Vec_1, vector<int>& Vec_2, int k)
[/cpp]
(+ im Header fehlt der Rückgabetyp)
-
danke für die Hilfe.
gruss