3 Klassen ein Speicher....
-
Hi,
ich habe 3 KlassenCSocket
CMainDialog
CConnectDialogdie Klasse CSocket soll in den anderen beiden Klassen Verfügbar sein, also dachte ich mir, mach ich mir ein Object in der CMainDialog
class CMainDialog : public CDialog { public: CSocket CSocketClass; //hierk omtm anderer kram rein };
so dann ist die Klasse CSocket ja schonmal in der anderen Klasse verfügbar.
so dann dacht ich mir, erstelle ich in der Klasse CConnectDialog nen Pointer auf die Klasse CSocketclass CConnectDialog : public CDialog { public: CSocket *pCSocketClass; //anderer kram };
so dann hab ich in der Methode InitDialog von der Klasse CMainDialog des so gemacht, das der Pointer auf den Speicher des anderen CSocket objekts zeigt.
//InitMethode CConnectDialog connect; connect.pCSocketClass = &CSocketClass;
so jetzt setze gebe ich in der Klasse CMaindialog ner Varibale von der Klasse CSocket nen wert z.b. 1. Doch wenn ich in der Klasse CCOnnectDialog auf diese variabel der Klasse CSocket zugreifen will, bekomme ich nen Speicherzugriffsfehler, wieso??
Ich hoffe ihr habt verstanden was mein problem ist...
-
1.mit dem bisschen code is dir ziemlich schwer zu helfen...
2.kann es sein, dass du den pointer einer lokalen variable übergeben hast??wenn das nicht so ist, dann solltest du ein bisschen mehr code posten...
mfg
Plasy
-
das problem liegt glaube ich darin, dass du wegen der datenkapselung (private public) der klassen keinen zugriff auf die attribute der klasse CSocket hast.
um die datenkapselung aufzuheben, musst du die Klasse CSocket mit den gewünschten klassen "befreunden":
class CSocket
{friend class CMainDialog ;
friend class CConnectDialog;public:
//Methoden
private:
//Attribute
}
Danach kannst du über CMainDialog- und CConnectDialog- objekte die Attribute der klasse CSocket beinflussen. Good luck!
-
habe das jetzt so gemacht, so sieht die HeaderDatei der CSocketKlasse nun aus.
// Socket.h: Schnittstelle für die Klasse CSocket. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_SOCKET_H__3DEDA408_E839_485C_B7CE_CFDB57B8ACBE__INCLUDED_) #define AFX_SOCKET_H__3DEDA408_E839_485C_B7CE_CFDB57B8ACBE__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CSocket { friend class CMfcclient2Dlg; friend class CConnect; public: CSocket(); virtual ~CSocket(); void SocketInit(); int test; }; #endif // !defined(AFX_SOCKET_H__3DEDA408_E839_485C_B7CE_CFDB57B8ACBE__INCLUDED_)
test ist übrigens die variabel von der ich oben weiter gesprochen habe.
aber es klappt noch nciht, ich bekomme jetzt 12 fehlermeldungen.Kompilierung läuft...
Connect.cpp
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2143: Syntaxfehler : Fehlendes ';' vor ''
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'CSocket' : Fehlende Speicherklasse oder Typbezeichner
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'pCSocketClass' : Fehlende Speicherklasse oder Typbezeichner
I:\Programmierung\RemoteAdmin\mfcclient2\Connect.cpp(49) : error C2065: 'pCSocketClass' : nichtdeklarierter Bezeichner
I:\Programmierung\RemoteAdmin\mfcclient2\Connect.cpp(49) : error C2227: Der linke Teil von '->SocketInit' muss auf Klasse/Struktur/Union zeigen
mfcclient2.cpp
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2143: Syntaxfehler : Fehlendes ';' vor ''
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'CSocket' : Fehlende Speicherklasse oder Typbezeichner
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'pCSocketClass' : Fehlende Speicherklasse oder Typbezeichner
mfcclient2Dlg.cpp
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'CSocket' : Fehlende Speicherklasse oder Typbezeichner
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'pCSocketClass' : Fehlende Speicherklasse oder Typbezeichner
I:\Programmierung\RemoteAdmin\mfcclient2\mfcclient2Dlg.cpp(52) : error C2039: 'pCSocketClass' : Ist kein Element von 'CConnect'
i:\programmierung\remoteadmin\mfcclient2\connect.h(15) : Siehe Deklaration von 'CConnect'
Generieren von Code...
Kompilieren...
Socket.cpp
Generieren von Code...
Fehler beim Ausführen von cl.exe.mfcclient2.exe - 12 Fehler, 0 Warnung(en)
-
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2501: 'CSocket' : Fehlende Speicherklasse oder Typbezeichner
hast du vielleicht vergessen einen header einzubinden??
-
12 Fehler sind heftig...
es ist schwierig, diese liste von fehlern richtig zu interprätieren.
oftmals genügt es, wenn ich den obersten fehler behebe - die andern sind nur eine folge davon.Die erste Fehlermeldung
i:\programmierung\remoteadmin\mfcclient2\connect.h(21) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'
lässt mich hoffen, dass du wirklich ein ';' vergessen hast vor '*'.
überprüf das mal - passiert mir auch manchmal...
danach stehen die chancen gut, dass alle anderern fehlermeldungen ebenfalls verschwinden.
-
ich finds nur zum totlachen dass du uns den code der Socket.h zeigst, aber fehler postest die sich auf die connect.h beziehen...
-
Anonymous schrieb:
12 Fehler sind heftig...
12 Fehler sind lächerlich. Wenn du ein ; vergessen hast können auch 85 Fehler kommen. DAS ist heftig. (Aber das nur am Rande *g*)
-
die Fehler hab ci hdraußen, aber jetzt bekomme ich schon nen Speicherzugriffsfehler wenn ich den Dialog CConnectDialog(bzw. die klasse) nur öffne....
-
Hm, wenn es von der Klasse CSocket immer nur eine Instanz geben soll, warum
wendest du dann nicht einen Singelton an ?Devil
-
einen was? wat is dat?
das problem ist ja, das es mehrere Klassen gibt d.h. auch mehrere Dateien udn wie ihr wisst, sind Variabel nnur in eienr Daten bzw. in der Klasse verfügbar wo sie auhc stehen, ok extern gibts auch aber geht ja nich, weil das CSocket Object ja in ner Klasse definiert werden muss
-
Ich wüsste nicht wo da genau der Fehler sein sollte.
Ich tippe mal darauf das der Dialog irgendetwas macht und auf *pCSocketClass zugreift bevor der Zeiger umgehängt wurde.Das zu Analysieren würde a. mehr code brauchen und b. im MFC Forum mehr resonanz bringen.
Setze den Breakpoint hier:
connect.pCSocketClass = &CSocketClass;
und an der Stelle wo es kracht und schau welcher zuerst angesprungen wird.