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


Anmelden zum Antworten