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++
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;
    }
sauf que :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::vector <sf::TcpSocket*> V_client;
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).
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:

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;
        }
Comme indiqué en commentaire, le compilo ouvre "new_allocator.h" et fini sur une erreur :
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>]'|
Erreur évidemment incompréhensible à mon niveau.

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.