Alrik Fassbauer Geschrieben 9. Juni 2001 Geschrieben 9. Juni 2001 Hallo, miteinander. Ich will eine Variable der Doc-Klasse (äh...MFC) in einer Klasse eines Dialogfeldes auslesen. Scheinbar scheint das aber nicht zu gehen ?!? Jedenfalls behauptet der Compiler, er käme nicht an die Variabler heran, und das in mehreren Variationen: - Er sagt, er kämme prinzipell in der Dialogklasse nicht an die Doc-Klasse heran: Als ob er die Klasse nicht kennen würde. Einen #include-Befehl ignoriert er scheinbar. - Ein Objekt der Doc-Klasse kann scheinbar nicht erstellt werden, da es protected wäre (in der Header-Datei der Doc-Klasse). Ich weiß nicht, ob es ratsam wäre, diese Definition aus der "private"-Ecke in die "public"-Ecke zu verschieben... Ich schrecke davor zurück, da ich "unerwartete Seiteneffekte" (schöner Ausdruck ! > ) befürchte. Gibts da sonst noch einen Weg ? (Der exakte Hintergrund ist ganz einfach der, daß ich einen Wert aus einer Tabelle in eine andere Tabelle, die in einem Dialogfeld angezeit wird, hineinbekommen will - egal, wie ! Nähere Infos zu dieser Problematik im Thema "2 Tabellen mit c doppelplus korellieren" im Bereich "Datenbankprogrammierung")) MFG Zitieren
Saturo Geschrieben 9. Juni 2001 Geschrieben 9. Juni 2001 lololololOOOOLLL! Sorry, aber mit diesem Problemen habe ich nächte verbracht! Also...du willst aus einer bloeden MFC-Klasse einen Variableninhalt in eine andere Klasse bekommen, richtig? Also...warscheinlich ist die Variable protected, oder alle Variablen dieser von der MFC-generierten Klasse sind automatisch protected...wenn du also die Variable nicht auf public stellen kannst, bleibt dir die möglichkeit, die ich gewählt habe: Du baust in die Doc-Klasse eine Funktion ein,die die besagt Variable als Returnwert zurückgibt. Das geht, weil die Funktion ja ein Teil der Doc-Klasse ist. Jetzt kannst du z.b. eine globale / normale main variable den Wert dieser Funktion(return var) zuweisen. Der Variablenwert ist nun aus der Doc draussen...du kannst den Spieß umdrehen und die Variable auch verändern, oder mit solchen Funktionen deinen Wert wieder in eine andere Klasse transferieren. So, ich hoffe, das klingt nicht zu durcheinander und ich bete mal, dass ich dein Problem richtig gedeutet habe, viel Glueck Zitieren
Saturo Geschrieben 9. Juni 2001 Geschrieben 9. Juni 2001 Die Funktion sollte von ausserhalb der Klasse zugänglich sein, also auf public stellen. Zitieren
hoagi Geschrieben 10. Juni 2001 Geschrieben 10. Juni 2001 Hi, also ich finde es keine so gute Idee in den MFC-Klassenquellen herumzuspielen. Insbsondere wenn man nicht so genau weiss, was man tut. Mein Vorschlag wäre über den Anwendungsassistenten keine dialogbasiertes Anwendungstemplate zu erstellen, sondern ein SDI-Projekt zu erstellen. Wenn du dann in Schritt 6 des Anwendungsasisstenten deine Viewklasse nicht von CView ableiten lässt, sondern auf CFormView umstellst, hast du fast den gleichen Effekten wie bei einer Dialoganwendung, mit dem Unterschied, daß du gleich die Dokumentenklasse mit dabei hast. Good Luck Hoagie Zitieren
Saturo Geschrieben 10. Juni 2001 Geschrieben 10. Juni 2001 was? diese Idee habe ich mir aus sämtlichen Fachbüchern erlesen! *lacht* Ne, im Ernst. Ich hasse die MFC. Es ist ein engstirniges System für Einsteiger. Wenn du einige Zeit damit verbringst, kommst du schon garnicht mehr ohne sie aus...weil es halt fuer alles eine Funktion gibt. Mein Tip: lasst die Finger von der MFC! Spätestens bei DIngen wie OpenGL oder etwas komplexeren Gebieten, die man nicht dem Programm anpassen kann, sondern wo man das Programm auf z.B. Opengl anpassen muss, stösst du ganz schnell an die grenzen dieses komischen MFC-Systems. Ok, es gibt auch z.B. OpenGl für MFC, aber das ist wieder so eingeschränkt aufgebaut und erlaubt schlecht Programmänderungen . Ok, ich rede zuviel. Ich verzichte jedenfalls auf die MFC, weil ich mein Programm sehr gut alleine Klassen-und Objektorientiert erstellen kann(hoffentlich ) Zitieren
Alrik Fassbauer Geschrieben 10. Juni 2001 Autor Geschrieben 10. Juni 2001 Ich glaube, ich habe es zwischenzeitlich (und starken Verbrauch an Nerven) geschafft: In der View-Klasse lese ich ein, schicke es zur Dialogklasse (von der ich ein Objekt erstellt habe), gehe anschließend in die Dialogklasse (d.h. der Dialog wird aufgerufen) und lese dort aus. Ich hatte mal zwar eine Variable in der Doc-Klasse als "Zwischenspeicher" benutzt, aber es geht eigentlich auch so. Einmal abgesehen davon bin ich erst noch in der Ausbildung, da kann ich schlecht erkennen, was guter Programmierstil ist und was nicht (naja, einmal abgesehen von ein paar Basics). Zitieren
hoagi Geschrieben 10. Juni 2001 Geschrieben 10. Juni 2001 Achso, du erstellst dein Dialog aus ner View-Klasse. Viele Wege führen nach Rom, aber hier noch einmal ein Vorschlag um auf die Doc-Klasse (mittelbar) zuzugreifen. In der Dialog Klasse erhällst du über GetParent ein Pointer auf das CWnd-Objekt von deiner View. Mit ((CMyView*)GetParent())->GetDocument() etc.solltest du eigentlich Zugriff auf das Dokumenten-Objekt erhalten. Alternativ könntest du einen Zeiger auf die View in deine Dialog-Klasse einbauen und die in der View-Klasse mit this initialisieren. Solong Hoagi Zitieren
Alrik Fassbauer Geschrieben 10. Juni 2001 Autor Geschrieben 10. Juni 2001 Ja, danke. So, ich habe jetzt einen arbeitsreichen Tag hinter mir. Der morgige Tag wird noch arbeitsreicher ! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.