instanz zurückgeben...
-
class s2 { private: typedef std::vector<boost::shared_ptr<s1> > vec; typedef std::vector<boost::shared_ptr<s1> >::iterator vec_it; vec s1Vector; public: void Instanz_hinzufügen() { // c1 *x = new c1(); s1Vector.push_back(boost::shared_ptr<s1>()); } void methode_der_Klasse_s1_aufrufen() { vec_it it; // alle elemente des vector durchgehen for (it = s1Vector.begin(); i != s1Vector.end(); ++i) { // will eine methode der klasse s1 aufrufen (it).methode(); } } };
nun so ok?
also das boost::shared_ptr<s1>() macht sowas wie c1 *x = new c1(); ?
die methode der klasse s1 ruf ich jetzt auch richtig auf?
muss mal erklären wie so smart pointer funktionieren;-) smart pointer scheinen nett zu seincu
-
Edit: Mist, der hat alle genommen..
-
Edt: weg..
-
Edit: gelöscht
-
Edit: boah, 4 mal
-
leichte edit problems *g*
auf meinen letzten post:
-----------------------
nun so ok?
also das boost::shared_ptr<s1>() macht sowas wie c1 *x = new c1(); ?
die methode der klasse s1 ruf ich jetzt auch richtig auf?
muss mal erklären wie so smart pointer funktionieren;-)cu
-
killer schrieb:
leichte edit problems *g*
auf meinen letzten post:
-----------------------
nun so ok?
also das boost::shared_ptr<s1>() macht sowas wie c1 *x = new c1(); ?
die methode der klasse s1 ruf ich jetzt auch richtig auf?
muss mal erklären wie so smart pointer funktionieren;-)cu
http://ootips.org/yonat/4dev/smart-pointers.html
Lesde das durch, das soll deine Fragen beantworten.
Und ja, die Methode wird aufgerufen.
Ich verweise nochmal auf meinem Beitrag, dass dies in einem C++-Code zeigt.
Edit: Besonders die Sektion "Why: STL containers" ist gut für dich, da sie das gleiche Problem beschreibt.
-
class Connection
{
public:
Connection(std::auto_ptr<Socket>& spSocket)
: spSocket_(spSocket)
{
}
private:
boost::shared_ptr<Socket> spSocket_;
std::string Nickname;
};class Sock
{
private:
typestf std::vector<Connection> CVector;
typedef std::vector<Connection>iterator CVector_it;CVector m_Connection;
unsigned int connectionObjectcount;
public:
void Connection_Instanz_hinzufügen()
{
// meine accept methode in klasse Socket gibt mir:
// auto_ptr<Socket> zurück...
std::auto_ptr<Socket> spSocket = m_serverSocket.accept();
Connection client(spSocket);
m_Connection.push_back(client);
connectionObjectcount++;
}void setConnectionNickname()
{
CVector_it it = m_Connection.begin() + ConnectionObjectcount;(it).Nickname = "User1";
}
};ich weiß nicht weiter;-( .... bitte um denkanstoß!
cu
-
AH.. Ich merke gerade, dass ich zuviel editiert habe und nicht einen Beitrag übrig gelassen habe.
So sieht es aus:#include <iostream> #include <vector> #include <boost/shared_ptr.hpp> class X { public: void method(); }; void X::method() { std::cout << "method()" << std::endl; } class Y { typedef std::vector<boost::shared_ptr<X> > vector; vector vec; public: void add(); void printall(); }; void Y::add() { vec.push_back(boost::shared_ptr<X>(new X)); } void Y::printall() { vector::iterator it = vec.begin(); while(it != vec.end()) { (*it)->method(); ++it; } } int main() { Y obj; obj.add(); obj.add(); obj.printall(); }
Den Rest machsts aber nun selber..
-
was ist wenn die klasse X so ausschaut?
class X { private: boost::shared_ptr<Socket> spSocket_; std::string nickname; public: Connection(std::auto_ptr<Socket>& spSocket) : spSocket_(spSocket) { } };
will dann sp_Socket in den vector geben...u dann nickname setzten mit iterator....
cu
-
natürlich soll das objekt X in den vector...meinte nur ich wollte auf spSocket_ ne instanz zuweisen u halt nickname setzten wenn das X im vector ist...
hmmm
cu
-
hmm schrieb:
natürlich soll das objekt X in den vector...meinte nur ich wollte auf spSocket_ ne instanz zuweisen u halt nickname setzten wenn das X im vector ist...
hmmm
cuDu machst es doch schon richtig, der Kontruktor ist doch dafür gut geeignet.
Oder du erstellst setter-Methoden mit denen du andere Werte zuweisen kannst.
Falls du über den Iterator dann den Nickname haben willst, erstellst du getter-Methoden().
-
class Server { private: // Variablen // Standard- und Copykonstruktor sind private. // Nur Methoden dieser Klasse können auf sie zugreifen. Server() : m_serverSocket(port), clientcount(0) {}; Server( const Server& ); ///ServerSocket m_serverSocket; ????? typedef std::vector<Connection> vector; vector m_clients; unsigned int clientcount; private: // Funktionen //void getIPAdress(); std::string getNickname(); void setNickname(); public: // Methoden // Diese statische Methode erzeugt die einzige Instanz. // Nur über diese Methode erhalten Anwender den Zugriff auf // die Instanz. static Server& getInstance(); void Server::AddClient(std::auto_ptr<Socket>& spSocket); void SendMessageToAllClients(std::string message); void SendMessageToClient(std::string nick, std::string message); void receiveMessage(); };
main.cpp
-----------------void main() { ServerSocket serverSocket(port); std::auto_ptr<Socket> socket = serverSocket.accept(); Server::getInstance(serverSocket????????).AddClient(socket); Server::getInstance().SendMessageToAllClients("Welcome to Server");
will von der main aus der klasse Server die instanz serverSocket
übergeben...weil ich die dort fürs receive brauche:void Server::receiveMessage() { char buffer[1024]; serverSocket.receive(buffer, sizeof(buffer)); std::cout << buffer << std::endl; }
wie übergebe ich das am besten? hmmm irgendwie will das net recht so:
Server::getInstance(serverSocket).AddClient(socket);hm?
cu
-
werd das bissal anders machen....serverSocket serversock; als instanz in Server klasse verwenden...
cu