IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Boucle basée sur des intervalles et std::list <unique_ptr>


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Par défaut Boucle basée sur des intervalles et std::list <unique_ptr>
    Bonjour,

    Je souhaite pouvoir parcourir un conteneur list avec une boucle basée sur des intervalles.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::list<std::unique_ptr<sf::TcpSocket>> clientList;
    clientList.emplace_back(make_unique<sf::TcpSocket>(client));
     
    for(std::unique_ptr<sf::TcpSocket>& i : clientList)
       {
           std::cout << "Content list socket :" << i->getRemoteAddress() << std::endl;
       }
    A partir de ce code, le compilo me dit que j'utilise une fonction supprimée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: use of deleted function 'sf::TcpSocket::TcpSocket(const sf::TcpSocket&)'
    Bien évidemment si j'essais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << "Content list socket :" << i.getRemoteAddress() << std::endl;
    Le compilo me retourne l'erreur que "class std::unique_ptr<sf::TcpSocket>" n'a pas de méthode "getRemoteAddress()"

    Je sais bien que je ne peux pas copier un pointeur unique_ptr mais il me semble que justement dans ma boucle, je ne fais aucune copie dans "i". Pourquoi la fonction est-elle supprimé/mon objet détruit ? je dois avouer que je ne comprends pas trop.

    Et dans ce cas précis, comment afficher en console ce que je demande dans ma boucle ? Est-ce possible avec une boucle basée sur des intervalles ?

    Merci par avance pour vos réponses.

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par Karl Marx Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clientList.emplace_back(make_unique<sf::TcpSocket>(client));
    Hello,

    L'erreur vient d'ici je pense, il y à des copies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sf::TcpSocket *client;
     
    std::list<std::unique_ptr<sf::TcpSocket>> clientList;
    clientList.emplace_back(client);
     
    for(std::unique_ptr<sf::TcpSocket>& i : clientList)
    {
           std::cout << "Content list socket :" << i->getRemoteAddress() << std::endl;
    }
    On donne les paramètres du constructeur à emplace_back, pas un object déja construit, sinon c'est le constructeur par copie qui sera appelé (et emplace_back perd son utilité)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Par défaut
    Merci pour ton aide.

    Hm du coup je suis un peu perdu, comment je stock mes clients dans le conteneur ?

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Tu as un conteneur de std::unique_ptr, le constructeur de std::unique_ptr prend un pointeur.
    Tu appelles donc emplace_back avec un pointeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sf::TcpSocket *client;
    clientList.emplace_back(client); // et emplace_back crée l'unique_ptr pour toi à partir de client.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Par défaut
    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2009, 15h33
  2. requête basée sur des intervalles d'heures
    Par lieselotte02 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/06/2007, 21h23
  3. [Eval] Problème de boucle for sur des tableaux
    Par battle_benny dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/01/2006, 23h55
  4. [MFC]Application basée sur des boites de dialogue
    Par -=Spoon=- dans le forum MFC
    Réponses: 2
    Dernier message: 24/08/2005, 11h55
  5. analyse "périodes" basées sur des dates.
    Par Yorglaa dans le forum Oracle
    Réponses: 7
    Dernier message: 22/12/2004, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo