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 :

Surcharge d'une méthode dans une classe interne


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut Surcharge d'une méthode dans une classe interne
    Bonjour,

    J'utilise Live555, qui est une bibliothèque logicielle pour faire du streaming.
    Je développe un serveur, et je voudrais modifier la réaction de mon serveur à la commande "GET_PARAMETER".
    Cela implique de redéfinir une méthode qui se trouve dans une classe interne. Je n'ai pas réussi à le faire


    Voici le code que j'ai récupéré (je ne l'ai 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
    class RTSPServer: public GenericMediaServer {
    public:
        class RTSPClientSession: public GenericMediaServer::ClientSession {
        protected:
            virtual void handleCmd_GET_PARAMETER( ... );
        }
    }
     
    void RTSPServer::RTSPClientSession::handleCmd_GET_PARAMETER( ... ) {
        // By default, we implement "GET_PARAMETER" just as a 'keep alive', and send back a dummy response.
        // (If you want to handle "GET_PARAMETER" properly, you can do so by defining a subclass of "RTSPServer"
        // and "RTSPServer::RTSPClientSession", and then reimplement this virtual function in your subclass.)
        setRTSPResponse(ourClientConnection, "200 OK", fOurSessionId, LIVEMEDIA_LIBRARY_VERSION_STRING);
    }



    Et voici un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class DynamicRTSPServer: public RTSPServer
    {
    public:
        class RTSPClientSession: public RTSPServer::RTSPClientSession {
        protected:
            virtual void handleCmd_GET_PARAMETER( ... );
        };
    }
     
    void DynamicRTSPServer::RTSPClientSession::handleCmd_GET_PARAMETER( ... )
    {
        cout << "Méthode surchargée avec succès" << endl;
        setRTSPResponse(ourClientConnection, "200 OK", fOurSessionId, LIVEMEDIA_LIBRARY_VERSION_STRING);
    };

    Mon code compile, mais ne fonctionne pas car l'affichage avec cout n'est jamais réalisé. La surcharge est donc ratée.
    Quelqu'un saurait comment faire ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Il te faut connaitre ce que fait exactement la méthode et le type de données qui en résulte.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    es-tu sûr d'initialiser un DynamicRTSPServer ?
    Es-tu sûr que c'est ta DynamicRTSPServer::RTSPClientSession qui est utilisé ?
    Es-tu sûr que la signature est identique ? Utilise le mot-clé override qui t'indiquera une erreur le cas échéant : void handleCmd_GET_PARAMETER( ... ) override;
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    es-tu sûr d'initialiser un DynamicRTSPServer ?
    Es-tu sûr que c'est ta DynamicRTSPServer::RTSPClientSession qui est utilisé ?
    Es-tu sûr que la signature est identique ? Utilise le mot-clé override qui t'indiquera une erreur le cas échéant : void handleCmd_GET_PARAMETER( ... ) override;
    Oui, j'initialise bien un DynamicRTSPServer.
    Oui, la signature est identique. Quand j'utilise override, j'ai un warning, mais ça compile quand même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
    C'est probablement RTSPServer::RTSPClientSession qui est utilisé à la place de DynamicRTSPServer::RTSPClientSession. Je ne vois pas comment régler ça.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Il va te falloir plonger dans la doc et travailler autour de l'initialisation du serveur je pense.
    Tu peux activer le c++11 et vérifier que la compilation passe avec override. Sinon la signature est différente et tu ne surcharges pas la bonne fonction mais en crées une autre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut
    J'ai testé override avec le C++11, la compilation n'indique aucun problème.

    Il n'y a pas énormément de documentation, en dehors du Doxygen.

    Mon code vous semble-t-il cohérent ? Auriez-vous procédé de la même manière ?

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    As-tu essayé de mettre un breakpoint dans le constructeur de ta classe et dans ta méthode redéfinie ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut
    C'est une application temps-réel, débugger avec des breakpoints est une mauvaise idée.
    Mais je confirme que le constructeur de la classe DynamicRTSPServer été appelé, si je mets un cout dedans, il est affiché.

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Et ta classe n'est pas testée en dehors d'un contexte temps réel?

    Dommage…

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si le code compile, il est bon point de vue C++.
    Maintenant tu utilises une lib particulière, et on ne sait rien de son initialisation.
    Fais appel au support de cette lib.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Par défaut
    D'accord, c'est ce que je vais faire, merci bien.

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

Discussions similaires

  1. [PHP 5.3] [POO] Appel d'une méthode dans une méthode
    Par yann18 dans le forum Langage
    Réponses: 6
    Dernier message: 20/10/2011, 09h56
  2. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  3. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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