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

C++ Discussion :

Pointeur non modifié.


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Pointeur non modifié.
    Salut.
    J'ai un problème, j'envoie un pointeur à une fonction mais celui-ci n'est pas modifié.

    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::string Network::getLastRequest(User* user) {
        std::string request="";
        clock.restart();
        std::vector<std::pair<User*, std::string>>::iterator it;
        while (request == "" && clock.getElapsedTime().asSeconds() < timeOut.asSeconds()) {
            if (requests.size() > 0) {
                it = requests.begin();
                request = it->second;
                user = it->first;
                it = requests.erase(it);
            }
        }
        return request;
    }
    Je récupère la dernière requête reçue, ainsi que un pointeur vers l'utilisateur qui a envoyé la requête afin de renvoyer une réponse, malheureusement, le pointeur *user que j'envoie à la fonction n'est pas modifié du coup j'ai un socket null et ça plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     odfaeg::User* user = nullptr;
            if (odfaeg::Network::hasRequest()) {
                std::string request = odfaeg::Network::getLastRequest(user);
                std::cout<<"request : "<<request<<std::endl;
                std::cout<<"socket adress : "<<&user->getTcpSocket()<<std::endl;
                if (request == "ping") {
                    odfaeg::SymEncPacket packet;
                    packet<<"pong";
     
                    user->sendTcpPacket(packet);
                }
            }
    Voici le prototype de la fonction dans le .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static std::string getLastRequest (User *user = nullptr);
    Pour info je suis sur ubuntu 64 bits.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Passes-tu dans ton while et ton if ?

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Tu modifies le pointeur, et non sa valeur, il faut donc que tu le passes par référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static std::string getLastRequest (User *& user = nullptr);

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ha oui, c'était ça!

    Merci.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Tu modifies le pointeur, et non sa valeur, il faut donc que tu le passes par référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static std::string getLastRequest (User *& user = nullptr);
    Ça marche, ça, une référence avec une valeur par défaut?

    Edit: Ah, c'est parce que nullptr est une variable globale const, et pas une constante; cela fait de nullptr une lvalue...

  6. #6
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Effectivement, ça ne fonctionnerait pas sinon, en tout cas avec GCC, car VisualStudio permet ce genre de choses.

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

Discussions similaires

  1. Pointeur non modifié à l'interieur d'une fonction ? o_O
    Par stephane.lallee dans le forum SL & STL
    Réponses: 8
    Dernier message: 19/03/2009, 16h06
  2. Valeur d'un pointeur non modifiée
    Par Dimitri_87 dans le forum Linux
    Réponses: 5
    Dernier message: 25/11/2008, 10h42
  3. Rendre un champ non modifiable sur un onclick
    Par damjal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2005, 01h16
  4. Réponses: 5
    Dernier message: 30/09/2005, 16h42
  5. Attributs d'un record en property non modifiables
    Par WebPac dans le forum Langage
    Réponses: 15
    Dernier message: 11/04/2005, 12h59

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