Bonjour la communauté,
Pour utiliser le module réseau de SFML j'ai besoin de bûcher (hélas) les pointeurs.
Après quelques tâtonnements (et beaucoup d'aide de Laurent du forum SFML), j'arrive au code suivant qui compile ET qui fonctionne !
C++
sauf que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ... // lancement du listener serveur : allo std::vector <sf::TcpSocket*> V_client; bool tousPresents(false); while(!tousPresents) { // déclaration d'un socket à affecter au prochain client qui le demande sf::TcpSocket *joueur = new sf::TcpSocket(); if (allo.accept(*joueur) == sf::Socket::Done) { selecteur.add(*joueur); V_client.push_back(joueur); } if (V_client.size() == nbJoueurs) tousPresents=true; }
c'est mal, ai-je lu par ici... Il semblerait qu'on ne code plus en C++ avec des pointeurs nus mais avec des pointeurs intelligents (le mieux, à mon sens, serait de coder sans pointeur du tout mais bon).
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::vector <sf::TcpSocket*> V_client;
Débutant mais discipliné, je tente donc de remplacer le pointeur nu par un pointeur unique_ptr. cela donne ceci (<memory> est inclus) et le compilo est réglé pour accepter c++11:
Comme indiqué en commentaire, le compilo ouvre "new_allocator.h" et fini sur une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 std::vector <std::unique_ptr<sf::TcpSocket>> V_joueur; bool tousPresents(false); while(!tousPresents) { // déclaration d'un socket à affecter au prochain client qui le demande std::unique_ptr<sf::TcpSocket> joueur(new sf::TcpSocket); // <= ça le compilo n'aime pas ! :/ if (allo.accept(*joueur) == sf::Socket::Done) { selecteur.add(*joueur); V_joueur.push_back(joueur); } if (V_joueur.size() == nbJoueurs) tousPresents=true; }
Erreur évidemment incompréhensible à mon niveau.error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = sf::TcpSocket; _Dp = std::default_delete<sf::TcpSocket>]'|
Par ailleurs, je me suis aussi laissé dire que push_back et unique_ptr, ce n'était pas compatible...
Quelques pistes, conseils et indications de la syntaxe correcte serait donc TRES bienvenus.
Merci de m'avoir lu.
Rick.
Partager