Grundlegende Frage zu Pointern und Klassen
-
Hallo, ich schreibe momentan ein kleines Simulations-Programm. Da ich MFC-benutze muss ich mich zwangsweise micht Pointern auf Klassen rumärgern. Ich habe mal 2 Ansetze von mir Bildlich dargestellt:
_________ | Toolbox| m_pSystem(2) mit dem übergebenen System-Pointer auf die System-Klasse zugreifen |(Child) |------------------------------------------ |________| | ^ | | | | m_pToolbox System-Pointer übergeben | | | _|______________ _________\/________ | Fenster | m_pSystem(1) | System | | (Parent) |--------------------->| (Neben-Klasse) | |_______________| Fenster kann |_________________| ebenfalls auf die System-Klasse zugreifen Fesnter::m_pToolbox->m_pSystem = Fenster::m_pSystem ################################################################################ ODER: ################################################################################ _________ | Toolbox| | (Child)| |________| | | | m_pFenster die Daten für die System-Klasse übergeben | _____\/__________ _________________ | Fenster | m_pSystem | System | | (Parent) |----------------------->| (Neben-Klasse) | |_______________| Fenster übergibt |_________________| die Daten an die System-Klasse Toolbox::m_pFenster->DatenÜbergeben(Daten); Fenster::DatenÜbergeben(Daten) { m_pSystem->Variable = Daten; }
Welche dieser Varianten ist richtig? Die 1. wäre natürlich weitaus einfacher, aber ich habe immer einen Debugger-Fehler bekommen. (MSVC++)
-
ich würde 2tere bevorzugen.
sieht aus wie MDI ........ oder SDI?
-
Das gane ist ein SDI-Projekt. Das Problem bei Variante 2 ist allerdings etwas eigenartig:
Ich gebe meiner Fenster-Klasse eine Funktion: CallPaint()
Dann gebe ich meiner Toolbox einen Pointer für meine Fenster-Klasse: CFenster* m_pParent;
Allerdings muss ich dafür in den Header der Toolbox-Klasse den Header der Fenster-Klasse includen. Jetzt kommt der Fehler beim compilieren: "Fehlendes ';' vor '*'." - Was bei VC++ soviel heißt wie Fenster-Klassen-Header nicht gefunden.
-
wenn du nur einen Zeiger benutzt, musst du nicht die ganze Header einbinden, es reicht wenn du dem Linker mitteilst, dass die Klasse exisitiert
class CFenster;
das einfach vor die eigentliche Klasse schreiben
ich weis jetzt aber nicht ob das dein Problem behebt