Funktionen in anderen Klassen sichtbar..



  • Hallo leute,

    ich habe folgendes anliegen:

    ich habe mir ein mfc-projekt erstellt. dort habe ich nun auch ein tab mit 4"seiten".

    für jede seite habe ich eine klasse erstellt.(CPageConnection,CPageSensor,CPageBasic und CPageDisplay).

    in der klasse CPageConnection habe ich eine Funktion

    void OnError(const char* pErrorTxt, int nErrorValue);
    

    ,die mir bei einem Fehler etwas auswirft.

    diese ist natürlich in der PageConnection.h deklariert und wird in der dazugehörigen .cpp datei verwendet.

    //Displaying the error text
    void CPageConnection::OnError(const char* pErrorTxt, int nErrorValue)
    {
    	char ErrorString[200];
    
    	cout << pErrorTxt << "\n";	
    	if(m_pLLT->TranslateErrorValue(nErrorValue, ErrorString, sizeof(ErrorString)) >= GENERAL_FUNCTION_OK)
    		cout << ErrorString << "\n\n";
    }
    

    in der klasse CPageSensor habe ich nun foglenden aufruf:

    if((nRetValue = m_pLLT->SetResolution(m_nResolution)) < GENERAL_FUNCTION_OK)
    {
    	OnError("Error during GetMeasuringField",nRetValue);
    	return;
    }
    

    Nun will ich aber, dass mir diese funktion "OnError" auch in der PageSensor usw. enthalten bzw. sichtbat ist. ohne dass ich die wieder in .h und dann nochmal in der .cpp-datei reinschreiben muss.

    wie muss ich da vorgehen??



  • Steckst du immer noch im selben Projekt? Wir haben doch schon mehrfach durchgekaut, daß du dafür ein CPageConnection-Objekt benötigst und wie du an dieses herankommst (siehe auch hier).

    PS: Wenn die OnError() nicht nur mit CPageConnection-Fehlern zu tun haben soll, ist sie in der Klasse vermutlich fehl am Platz 😉



  • ja, immer noch gleiches projekt..

    ja gut..dann könnte ich mir ja eine neue klasse erstellen und die funnktion dort reinschreiben. dann müßte ich aber trotzdem noch von anderen klassen auf die funktion zugreifen können.

    sozusagen muss die funktion "offen" sein..wie mache ich dies nur?



  • Erstmal: Du kannst auch globale Funktionen anlegen (außerhalb aller Klassen). Dann müssen deine Tab-Klassen nur den Header einbinden und können die Funktion verwenden.

    Ansonsten: (nicht statische) Methoden kannst du nur verwenden, wenn du ein Objekt der jeweiligen Klasse hast. Wie du an dieses Objekt kommst, mußt du wissen.



  • ja, sowas will ich machen.globale funktionen, auf die ich überall von allen klassen zugreifen kann..wie mache ich dies mit globalen funktionen?



  • indem du sie außerhalb einer Klasse deklarierst:

    //functions.h
    //Prototypen der Hilfsfunktionen
    #ifndef FUNC_H
    #define FUNC_H
    void OnError(int num);
    ...
    #endif
    
    //functions.cpp
    //definiert die Funktionen
    #include "functions.h"
    
    void OnError(int num)
    {
      ...
    }
    ...
    
    //irgendwo im Programm
    #include "functions.h"
    
    ...
    if((nRetValue = SetResolution()) < GENERAL_FUNCTION_OK)
    {
      OnError(nRetValue);
      return;
    }
    


  • ich muss nur noch eins wissen:

    functons.h und functions.cpp ist doch auch eine eigene klasse oder füge dieses in mein projekt als "neue datei: .h" und "neue datei: .cpp"??



  • Siehst du dort eine Klasse? Das sind ganz normale Quell-Dateien, die du als "C/C++ Headerdatei" bzw. "C++ Quellcodedatei" in dein Projekt einbinden kannst.

    (wir sind hier nicht bei Java, wo alles in Klassen organisiert wird)


Anmelden zum Antworten