Unzulässiger Aufruf einer nicht statischen Memberfunktion



  • Moin Ihrs,
    Nachdem mir mit meiner Matrix schon gut weitergeholfen wurde, habe ich aber noch ein Problem mit den Funktionsaufrufen. Ich habe es zwar schon in dem Ursprungsthread gepostet, aber ich denke mal, es hat ja nix mehr mit dem ursprünglichen Problem zu tun, deshalb nochmal hier 🙂

    1>h:\c++_console\stanzmatrix\stanzmatrix\stanzmatrix.cpp(64) : error C2352: 'matrix::zeile': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    1>        e:\programme\microsoft visual studio 8\vc\include\matrix.h(70): Siehe Deklaration von 'matrix::zeile'
    1>h:\c++_console\stanzmatrix\stanzmatrix\stanzmatrix.cpp(65) : error C2352: 'stanzMatrix::stanzMultiplikation': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    1>        e:\programme\microsoft visual studio 8\vc\include\stanzmatrix.h(51): Siehe Deklaration von 'stanzMatrix::stanzMultiplikation'
    1>h:\c++_console\stanzmatrix\stanzmatrix\stanzmatrix.cpp(66) : error C2352: 'stanzMatrix::stanzAddition': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    1>        e:\programme\microsoft visual studio 8\vc\include\stanzmatrix.h(38): Siehe Deklaration von 'stanzMatrix::stanzAddition'
    

    und noch die dazugehörigen Stellen.
    Irgendwie klappen wohl die Funktionsaufrufe nicht.
    Ich vermute mal für ein C++-Crack eine Trivialität, aber für mich noch nicht verständlich 😞
    matrix.h

    class matrix 
      { 
        public:
    ...
    
          vector<werteTyp> zeile(const groessenTyp& zeilenNummer, const matrix& ausgabeMatrix)
            {
              ...
            }
    
    ...
    

    berechnung.cpp

    ...
        for (matrix::groessenTyp h=0; h < anzahlErzeugendeElemente; h++)
          {
    	zwischenVektor02.clear();
    	zwischenVektor03.clear();
    	zwischenVektor04.clear();
    	zwischenVektor04 = stanzMatrix::zeile((matrix::groessenTyp) h + 1, aktuelleStanzMatrix);
    	zwischenVektor03 = stanzMatrix::stanzMultiplikation(zwischenVektor04, rechenVektor01);
    	zwischenVektor02 = stanzMatrix::stanzAddition(zwischenVektor01, zwischenVektor03);
    	zwischenVektor01 = zwischenVektor02;
    	zwischenVektor02.clear();
    	zwischenVektor03.clear();
    	zwischenVektor04.clear();
          }
    
    ...
    


  • Na Du musst entweder ein Objekt haben mit dem Du Deine Methoden aufrufst (analog zu zwischenVektor.clear(), hier ist zwischenVektor das Objekt und clear() die Methode), oder Du machst die Methode static (was aber hier schlechter Stil ist).

    Vom objektorientierten Standpunkt aus hast Du eine matrix und möchtest gern eine Zeile daraus haben:

    matrix myMatrix(.....);
    vector<matrix::werteTyp> zeile5 = myMatrix.zeile(5);
    

    Ich kenne den Inhalt Deiner zeile-Methode nicht, aber ich nehme an Du gibst die n-te Zeile der ausgabeMatrix zurück? Falls ja, ist das kein sehr objektorientierter Ansatz, Du solltest die n-te Zeile von this (welches aber nicht notiert werden muss) zurückgeben.


Anmelden zum Antworten