UpdateData Problem



  • also die funktion ist IN meiner Clientclass...
    und joah die buttonfunktion OnButtonClient...ist in einer anderen klasse



  • dlg müsste global sein..



  • also dlg...habe ich in der clientclass ...nur ein mal deklariert...und auch nur in der funktion...

    und einmal in der anderen klasse von der aus der dialog aufgerufen wurde... !



  • Ellinas schrieb:

    also die funktion ist IN meiner Clientclass...

    Wenn das eine Member-Funktion des Dialogs ist, geht das sogar noch einfacher - dann hat die nämlich vollen und direkten Zugang zu dessen anderen Membern:

    void clientclass::PrintCPS(LPCSTR Tag,float CPS)
    {
      m_Message = Tag;
      UpdateData();
      ...
    }
    

    (wenn du es unbedingt explizit aufschreiben willst, "this->UpdateData();" bringt das selbe Ergebnis)



  • oh dann habe ich dich falsch verstanden...und ich habe mich falsch ausgedrückt diese funktion ist keine member funktion !!



  • clientclass dlg erzeugt nicht den selben Dialog, es muß entweder ein Verweis mitgegeben werden oder dlg global gehalten werden (finde ich am besten, auch wenn es nicht ganz C++ konform ist)



  • Ja, was denn nun, entscheide dich mal 😉
    (und das beste wäre es wirklich, die Funktion zu einem Member der Klasse zu machen - oder willst du sie auch noch in einem anderen Zusammenhang verwenden?

    Wenn du wirklich eine globale Funktion brauchst, mußt du ihr auf irgendeinem Weg die Adresse des existierenden clientclass-Objektes übergeben, damit sie darauf zugreifen kann. Das geht entweder per Parameter (siehe mein Beispiel etwas weiter oben) oder indem du dieses Objekt global anlegst:

    clientclass theDlg;
    void CWillkommensdialog::OnButtonclient()
    {
      theDlg.DoModal();
    }
    
    void PrintCPS(...
    {
      theDlg.m_Member="Test";
      theDlg.IpdateData();
      ...
    }
    

    (ich bevorzuge die Version als Member-Funktion (und im Notfall die Übergabe als Parameter))



  • Eine Member-Variable ist doch auch "global", im Sinne der Speicherverwaltung. Natürlich ist es besser eine Member-Variable zu erstellen als ein globales Objekt. Aber es ging hierbei das Problem, daß gedacht wurde das Objekt "clientclass" würde immer das selbe Objekt erstellen; also man könnte durch einen neuen Dialog auf den anderen Dialog der "clientclass"-Klasse zugreifen. So habe ich das Problem verstanden. 😉



  • also aber wie mache ich denn daraus eine member funktion ???
    Wenn ich das gemacht habe dann ist das überhaupt kein problem mehr !! 😃



  • Ellinas schrieb:

    also aber wie mache ich denn daraus eine member funktion ???

    Schritt 1: Du ergänzt in der Definition der Klasse "clientclass" (btw. ein *** Name) die Zeile "void PrintCPS(LPCSTR,float);"
    Schritt 2: Du änderst das "void PrintCPS(...)" bei deiner Funktionsdefinition um in "void clientclass::PrintCPS(...)"

    PS @RR: Nein, eine Membervariable ist nicht global, sondern immer lokal bezüglich des enthaltenen Objektes 😉


Anmelden zum Antworten