Übergabe eines Zeigers auf eine Klasse an eine Funktion



  • Hallo zusammen,
    ich habe ein Problem mit der Bearbeitung von Klassen unter Visual C++.
    Folgender Programmaufbau:
    Ich habe eine Dialogfeld Anwendung unter MFC (Visual C++) erstellt.
    In der Header Datei der Hauptdialogfeldklasse erstelle ich als Variable eine Klasse MyClass, die verschiedene Werte speichert.
    Da ich die Gleichen Werte öfter brauche, zeige ich mit verschiedenen Zeigern auf die Klasse.

    // CMyDialogDlg Dialogfeld

    class CMyDialogDlg : public CDialog
    {
    // Konstruktion
    public:
    void Weiter();
    void Auswahl();
    CMyDialogDlg(CWnd* pParent = NULL); // Standard-Konstruktor

    class MyClass // Erstellte Klasse
    {
    public:
    int wert1;
    char wert2;
    };
    MyClass *p1,*p2; // Zeiger auf die Klasse

    In meiner Hauptdialogfeldklasse gibt es die Funktion Auswahl(), mit der ich festlegen möchte mit welchen Werten weitergearbeitet werden soll.
    Die von *p1 oder *p2.

    Die Funktion Auswahl::

    void CMyDialogDlg::Auswahl()
    {
    int i=1;

    p1->wert1=1;
    p2->wert1=2;
    p1->wert2='a';
    p2->wert2='b';

    if (i=='1')
    {
    // Jetzt soll man in der Funktion Weiter mit den Werten
    // aus der Klasse MyClass weiterarbeiten, auf die
    // (*p1) zeigt
    }
    else
    {
    // Jetzt soll man in der Funktion Weiter mit den Werten
    // aus der Klasse MyClass weiterarbeiten, auf die
    // (*p2) zeigt
    }

    }

    void CMyDialogDlg::Weiter( ????? )
    {

    }

    Mein Problem ist jetzt die Übergabe an die Funktion Weiter().
    Ich könnte einfach eine Variable übergeben und mittels switch-Anweisung in der Fkt. Weiter() Eine Auswahl treffen. Dann würde ich aber 2 mal den gleichen Code benutzen. Das will ich verhindern.
    Es muss doch eine Möglichkeit geben wie ich in der Funktion Weiter() mit folgendem Befehl

    variable.wert1= ...
    oder
    variable.wert2= ...

    die Zuweisung für die richtigen Variablen mache. Also von *p1 oder *p2.
    Je nachdem wo ich gerade bin.

    Ich hoffe mir kann jemand helfen, denn irgendwie verzweifle ich an diesem "einfachen" Problem.

    Vielen Dank schon mal.



  • Wenn ich dich richtig verstanden habe? (Was mir ein bischen schwer gefallen ist)
    Willst du In auswahl die Klasse auswählen mit der Gearbeitet wird und in Weiter mit dieser auswahl Weiterarbeiten.

    Dann schau dir doch nochmal genau die Möglichkeiten von Funktionen an. 😉

    Wie wäre es mit:

    class CMyDialogDlg : public CDialog
    {
       ....
       void Weiter();
       MyClass* Auswahl();
       ...
    }
    

    und in Weiter mit

    void CMyDialogDlg::Auswahl()
    {
       ...
       MyClass* Data = Auswahl();
       ...
    }
    

    Ich hofe das hat geholfen 😕


Anmelden zum Antworten