Nicht-verwaltete Klasse in einer Form (verwaltete Klasse) oder Global definieren... Fehlermeldungen! Bitte um Hilfe!
-
Moin zusammen...
Habe mal wieder ein riesiges Problem.
Habe eine Nicht-verwaltete-Klasse namens "Steuerung".
Die Attribute und Funktionen stehen in Steuerung.h und Steuerung.cpp.Ich habe drei Forms. Die Steuerungs-Klasse soll von jeder Form aus aufrufbar sein.
PLAN A
Ich bin dann also hergegangen und habe diese Klasse gleich am Ende der "Steuerung.h" deklariert.
Steuerung.h
class Steuerung { public: [...] }; Steuerung eineSteuerung;Da die Steuerung.h überall includet ist sollte die Funktion also überall zugeänglich sein. Nur wenn ich das ganze so compiliere meckert der Linker und will mir verzapfen, dass eineSteuerung bereits in der Form frmMenu definiert ist.
error LNK2005: "class Steuerung ShipCombat::eineSteuerung" (?eineSteuerung@ShipCombat@@$$Q3VSteuerung@@A) ist bereits in frmMenu.obj definiert.
Doch das stimmt definitiv nicht, ich habe in der Form frmMenu nichts deklariert.
Also dachte ich mir PLAN B aus.
In jeder Form einfach die Steuerung lokal definieren. Nur da meckert jetzt wieder der Compiler:
C2662: 'Steuerung::holeSpName': this-Zeiger kann nicht von 'Steuerung' in 'Steuerung &' konvertiert werden
Also wie ich es mache geht dieser Schrott nicht!
Das eleganteste wäre sicher die globale Deklaration in der Steuerung.h.
Woran kann dies liegen? Wer kann mir helfen?
Wäre wirklich sehr sehr dankbar!!
Vielen Dank schonmal!Gruß
Hirsch
-
Was hindert Dich daran, die Klasse ausserhalb der drei Forms zu instanziieren und den Forms eine Referenz auf diese Klasse mitzugeben?
-
HirschMan schrieb:
Doch das stimmt definitiv nicht, ich habe in der Form frmMenu nichts deklariert.
Aber Du hast doch garantiert in allen drei Forms das .h File included, oder? Und damit hast Du die Variable auch in allen drei Forms.
Das Problem liegt also eindeutig mittig zwischen Deinen Ohren! :p
-
Danke für die schnelle Antwort

Das Problem liegt also eindeutig mittig zwischen Deinen Ohren!
Hab mir schon fast sowas gedacht

Naja, wie du sicherlich gemerkt hast bin ich in Visual C++ ein Anfänger. Habe bisher hauptsächlich mit VB gearbeitet bzw. mit C++ unter Borland.
Was hindert Dich daran, die Klasse ausserhalb der drei Forms zu instanziieren und den Forms eine Referenz auf diese Klasse mitzugeben?
Peinliche Frage, aber wie genau macht man sowas?
-
Du könntest "Steuerung eineSteuerung" im Header extern machen -> "extern Steuerung eineSteuerung" und die Variable in Steuerung.cpp instanzieren.
also
Steuernung.hppclass Steuerung { public: [...] }; extern Steuerung eineSteuerung;Steuerung.cpp
#include "Steuerung.hpp" Steuerung eineSteuerung; ... der Rest ...
-
HirschMan schrieb:
Peinliche Frage, aber wie genau macht man sowas?
Bei Forms denke ich immer direkt an managed code, ich gehe aber mal davon aus, da wir hier im MFC Forum sind, dass Du drei von CDialog abgeleitete Dialoge hast. Erweitere deren Konstruktor um die gewünschte Referenz.
.h CMyDialog(MyObject & myObject, CWnd* pParent); // erweiterter Konstruktor . . . private: MyObject & m_myObject; .cpp: CMyDialog(MyObject & myObject, CWnd* pParent) : m_myObject(myObject), CDialog(CMyDialog::IDD, pParent) Aufruf: CMyObject myObject; . . . CMyDialog dlg(myObject); dlg.DoModal();Du kannst natürlich statt des erweiterten Konstruktors Deinen Dialogen auch Set-Funktionen spendieren mit denen Du Daten übergibst:
CMyObject myObject; . . . CMyDialog dlg(); dlg.SetObject(myObject); dlg.DoModal();
-
Vielen Dank euch beiden!
Das mit dem extern hat sehr gut funktioniert!
Danke nochmals...