Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu][TCP] Impossible de faire un vector de TcpSocket ?  (Lu 2639 fois)

0 Membres et 1 Invité sur ce sujet

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
[Résolu][TCP] Impossible de faire un vector de TcpSocket ?
« le: Avril 29, 2014, 10:03:05 pm »
Bonjour/bonsoir à tous.

Je commence à faire une partie réseau pour mon jeu.
J'en suis pour l'instant à faire l'écoute des connexions entrantes par le serveur, j'ai donc voulu mettre les sockets (il y aura 2 à 4 joueurs, donc 1 à 3 sockets, vu que le joueur 1 est le serveur) dans un vector.
Le problème est que lorsque je veux augmenter la taille du vector avec un .push_back(sf::TcpSocket()), le programme me renvoie une erreur de NonCopyable, pourtant premièrement ce n'est pas une copie (je n'utilise ce vector qu'à cet endroit étant donné que je commence juste le code du serveur) et deuxièmement je pensais que c'était possible car conseillé dans ce tutoriel : http://sfml-dev.org/tutorials/2.1/network-socket-fr.php

Il n'y a pas vraiment de code à montrer mais si ça vous aide à trouver le problème je vous mets quand même ceci : (comme je vous l'ai dit, il n'est utilisé nul part ailleurs)
// .h
std::vector< sf::TcpSocket > m_sockets;

//.cpp
m_sockets.push_back(sf::TcpSocket());
 

Merci beaucoup d'avance ;)
« Modifié: Avril 30, 2014, 05:23:23 pm par Borax Kid »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [TCP] Impossible de faire un vector de TcpSocket ?
« Réponse #1 le: Avril 29, 2014, 10:59:55 pm »
Citer
pourtant premièrement ce n'est pas une copie
C'en est une. push_back prend son paramètre par copie, pas par référence. De plus, std::vector copie (déplace en C++11) ses éléments lorsqu'il a besoin de plus de place en mémoire.

Citer
et deuxièmement je pensais que c'était possible car conseillé dans ce tutoriel
Il est en effet conseillé de stocker ses sockets dans un conteneur, mais il n'est pas dit qu'il faut en stocker des copies. Heureusement il y a d'autres moyens de faire ;)

sf::TcpSocket est, comme le message d'erreur l'indique, non-copiable. En effet cela n'aurait aucun sens, techniquement tu ne peux pas dupliquer une socket (et donc potentiellement une connexion active avec un client... bref je te passe les détails, je pense que t'as saisi le truc) comme ça. Donc, il faut que tu évites de copier à tout va tes sf::TcpSocket, et pour ça tu peux utiliser des pointeurs par exemple (de préférence encapsulés dans la classe standard qui va bien : std::unique_ptr ou std::shared_ptr).
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : [TCP] Impossible de faire un vector de TcpSocket ?
« Réponse #2 le: Avril 30, 2014, 05:22:53 pm »
Ah merci c'est aussi simple que ça, je ne savais pas comment fonctionné push_back.

 

anything