ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
788
788
EMPFEHLEN
-
Hallo,
gibt es eine Möglichkeit eine Klasseninstanz in jeder Headerdatei verfügbar zu machen ohne sie global zu deklarieren?
Ich möchte ein Modul für Netzwerkarbeit entwickeln und es als Klasse verpacken. Nunja, da ich bestimmte Methoden in verschiedenen Teilen meines Programms benötige brauch ich die Klasse am besten global.
Ich habe zwar folgende Möglichkeit entdeckt, aber diese wirft mir ein anderes Problem auf wo ich keine Lösung für finde. Und zwar, dass AfxSockInit() ja vor der ersten Deklaration von CSocket aufgerufen werden muss...
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// MFCSocket.h #ifndef _MFCSOCKET_H #define _MFCSOCKET_H #include "afxsock.h" class MFCSocket { private: UINT uiPort; public: CSocket SocketInstance; CSocket ConnectionInstance; MFCSocket(); ~MFCSocket(); BOOL OpenServer(UINT _uiPort); void Close(); }; extern MFCSocket MFCSocketInstance; #endif
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// MFCSocket.cpp #include "stdafx.h" #include "MFCSocket.h" MFCSocket::MFCSocket() { this->uiPort = 50000; } MFCSocket::~MFCSocket() { this->SocketInstance.close(); this->ConnectionInstance.close(); } BOOL MFCSocket::OpenServer(UINT _uiPort) { this->uiPort = _uiPort; this->SocketInstance.Create(this->uiPort); this->SocketInstance.Bind(this->uiPort); this->SocketInstance.Listen(); this->SocketInstance.Accept(this->ConnectionInstance); return true; } void MFCSocket::Close() { this->SocketInstance.close(); this->ConnectionInstance.close(); } MFCSocket MFCSocketInstance;
Ich hab den Code jetz nich getestet aber is auch nur damit Ihr wisst was ich meine.
Na jedenfalls MFCSocketInstance kann ich zwar global überall verwenden aber AfxSockInit(); kann ich so ja nicht vor der Deklaration von SocketInstance und ConnectionInstance aufrufen und damit wird die Klasse unbrauchbar.
Hoffe Ihr könnt mir helfen.
LG ManuGeändert von thekiller (06.01.10 um 12:36 Uhr)
OS: Win 7 Ultimate x64
CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
RAM: 4 x 8GB-DDR3 1333MHz
Board: Asus P8Z68-V/Gen3
GFX: Nvidia GTX580 (Palit)
Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
blog.unlimitedengine.de
design-projects.de
-
Hallo, du könntest CSocket als Zeiger deklarieren und die Instanz im Konstruktor erst nach dem Aufruf von AfxSockInit() erzeugen.
GrußCode cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
// h class MFCSocket { ... public: CSocket *pSocketInstance; CSocket *pConnectionInstance; ... }; // cpp MFCSocket::MFCSocket() { AfxSockInit(); pSocketInstance = new CSocket; pConnectionInstance = new CSocket; this->uiPort = 50000; } MFCSocket::~MFCSocket() { pSocketInstance->close(); pConnectionInstance->close(); delete pSocketInstance; delete pConnectionInstance; }
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Danke das funktioniert perfekt =)
Erstmal auf sowas kommen
LG ManuOS: Win 7 Ultimate x64
CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
RAM: 4 x 8GB-DDR3 1333MHz
Board: Asus P8Z68-V/Gen3
GFX: Nvidia GTX580 (Palit)
Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
blog.unlimitedengine.de
design-projects.de
Ähnliche Themen
-
Variblen Global verfügbar machen
Von spex im Forum PHPAntworten: 13Letzter Beitrag: 10.02.09, 00:19 -
Objekt global verfügbar machen
Von Igäl im Forum PHPAntworten: 3Letzter Beitrag: 15.12.08, 18:21 -
Array aus Konfigurationsdatei Global verfügbar machen
Von Marius Heil im Forum PHPAntworten: 6Letzter Beitrag: 15.06.06, 17:43 -
CSS "global" verfügbar machen in Dreamweaver
Von Pullmann im Forum HTML-EditorenAntworten: 1Letzter Beitrag: 31.01.06, 21:12 -
Einträge aus DB global verfügbar machen?
Von TinaX im Forum PHPAntworten: 4Letzter Beitrag: 07.11.04, 19:55





Zitieren
Login






