array im private Berreich erst später deklarieren
-
Hi,
Ich bin gerade dabei eine kleine Netzwerklib für meine Programme auf Socket Basis zu bauen.
Bei dem Server Bereich habe ich jedoch ein Problem und zwar möchte ich im private Bereich ein Socket Array erstellen damit alle Funktionen der Klasse darauf zugreifen können. Aber ich bekomme ja erst die slotanzahl beim erstellen des Objektes mitgeteilt, wie kann ich nun das array im private berreich darauf anpassen?
Hier nochmal an einem Beispiel deutlich gemacht:class server { private: #ifdef WIN32 SOCKET sock[slots]; #else int sock[slots]; #endif public: server(int slots); //Hier bekomme ich nun die Slotanzahl die ich im private Berreich einsetzen muss! };MFG ReduX
-
std::vector
-
new oder malloc tun's auch.

übrigens, besser
#ifndef WIN32 #define SOCKET int #endifals
#ifdef WIN32 SOCKET sock[slots]; #else int sock[slots]; #endif
-
Ja, oder SOCKET kapseln:
class socket : private boost::noncopyable { #ifdef _WIN32 // ... #else // ... #endif };Oder gleich Boost.ASIO o.ä. verwenden.
p.S.:
#ifndef WIN32 #define SOCKET int #endifBitte typedef, nicht #define.
-
Hi,
Danke für eure Antworten.
Werde wohl new verwenden
#ifndef WIN32 #define SOCKET int #endifSollte das nicht:
#ifndef WIN32 typedef int SOCKET; #endifheißen???
MFG ReduX
-
ReduX schrieb:
Werde wohl new verwenden

warum? was spricht denn gegen
stichwort schrieb:
std::vector
?
-
Eigentlich nichts...
Bin jedoch mit new mehr vertraut!MFG ReduX :xmas1:
-
trau dich an std::vector, wirst sehen das es ganz easy ist und viel komfortabler als new :xmas1:
-
Vor allem ist es viel mehr C++ als new

-
vector<int>* array = new vector<int>();Geht doch auch mit new

-
Hi,
Warum funktioniert bei vector folgendes nicht:std::vector<SOCKET> clients;Dort kommt die Meldung:
ISO C++ verbietet vector ohnen typ.
Aber der Typ SOCKET hab ich ja mit typedef deklariert!MFG ReduX :xmas1:
-
Zeig mal mehr von deinem Code
-
Hi,
Ja also am Anfang halt:#ifndef WIN32 typedef int SOCKET; #endifUnd in der Klasse im private Berreich dann:
std::vector<SOCKET> clients;MFG ReduX :xmas1:
-
#ifdef WIN32 typedef SOCKET socket_t; #else typedef int socket_t; #endif typedef std::vector<socket_t> socket_vector; socket_vector clients;was sagt der compiler dazu?
-
Hi,
Dann bekomme ich vom Compiler:expected initializer before »<« tokenVerstehe ich aber nicht!
MFG ReduX :xmas1:
-
Hast du eventuell vergessen, den Header <vector> einzubinden?
-
Hi,
Hatte ihn nicht includiert macht aber keinen unterschied wenn ich ihn reinmache!MFG ReduX :xmas1:
-
dann zeig doch mal mehr code.
-
Hi,
Hier mal das wesentliche:
MEINNAMESPACE.h:#ifdef WIN32 typedef SOCKET socket_t; #else typedef int socket_t; #endif typedef std::vector<socket_t> socket_vector; #include <vector> #include <string> namspace MEINNAMESPACE { class MEINECLASS { private: socket_vector clients; public: //.... }; }MFG ReduX :xmas1:
-
du solltest <vector> vielleicht früher inkludieren. am besten bevor du vector<> zum ersten mal verwendest.
-
Hi,
Danke jetzt Funktionierts.
War ein dummer leichzinsfehler von mir
Irgendwie wird im Post über mir der Code nicht in so ein kasten gepackt hab aber bbc verwendet.MFG ReduX :xmas1: