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 391
    Points
    11 391
    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);
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  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 369
    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 369
    Points : 41 519
    Points
    41 519
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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 391
    Points
    11 391
    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.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

+ 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