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 :

Récupérer une valeur calculée dans un autre .cpp


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Doctorant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut Récupérer une valeur calculée dans un autre .cpp
    Bonjour,

    Mon problème est sans doute redondant mais étant donné que je suis novice en C++ je n'arrive pas à trouver de solution qui me convienne. Du coup j'en profite pour m'excuser en avance des erreurs de syntaxe, techniques et même très générales sur ce langage.

    Je modifie actuellement un programme pour étoffer un peu le software et pour cela j'ai besoin de récupérer dans des données dans l'interface utilisateur. Je souhaiterais que la fonction créée retourne une valeur je la crée en int dans l'en-tête de telle sorte que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class: MaClasse:public
    {
      public slots:
        int MaFonction(int);
      }
    }
    Puis dans le .cpp je rajoute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaClasse::MaFonction(int){
     int Var1= boxVar1->value();
     return Var1;
    }
    Enfin dans un autre .cpp j'appelle cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int Var2
    int Var3=MaClasse().MaFonction(Var2);
    Il y a sans doute beaucoup d'erreurs ici mais je ne vois pas comment récupérer Var1. (En réalité il y en aurait plusieurs mais ce n'est pas tellement un problème majeur pour moi actuellement de retourner un tableau).
    Puis-je d'ailleurs éviter de passer par Var2 et Var3 (j'imagine qu'il y a largement de quoi optimiser ça)
    Vous avez le droit d'être choqués

  2. #2
    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
    Je ne vois pas ton soucis, la valeur de var1 est retournée par la fonction, donc à l'appel, var3 contient la valeur de var1.

    Comme ta fonction n'utilise pas son argument, tu peux la définir sans. En faisant ainsi, tu peux te passer de var2.
    Par contre, var1 est un détail de la fonction, elle n'existe pas pour le code appelant.

    Pour aller plus loin, les variables sont des vues de l'esprit.
    Toutes les variables constantes n'ont aucun prix sur l'optimisation, le compilateur se débrouille déjà très bien avec.
    Et dans le code compilé, il n'y a pas de variables à proprement parler.
    Seules existe en mémoire des variables locales actuellement accessible (la pile) et celles allouées à part (le tas).
    L'espace des variables locales est recyclé très régulièrement (à chaque fonction).

    Ce qui coûte en mémoire, ce sont les grosses allocations, les allocations sur le tas jamais libérées (les fuites mémoires).
    Ce qui coûte en rapidité, ce sont les opérations, et cela s'optimise en changeant d'algorithme (pour réduire les complexités) et en simplifiant les calculs.


    Par contre, plusieurs choses dans ta syntaxe me font penser que ce n'est pas que du C++, comme le public slot:, par exemple.

  3. #3
    Membre actif
    Homme Profil pro
    Etudiant-Benevole pour Electronic-MasterX
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Islande

    Informations professionnelles :
    Activité : Etudiant-Benevole pour Electronic-MasterX
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par défaut
    Du public slot c'est bel et bien du C++, si bien sur notre chèr ami utilise la (meilleure) bibliothèque Qt.

    mais en ce qui concerne le reste du code je ne saurais dire. la façon dont tu declares les classes ou bien ta façon de faire de l'heritage, je suis vraisemblablement choqué .

    Mais en admettant que ce soit du C++ (meme si j'en doute aussi sérieusement) je dirais que pour avoir la main sur une autre variable qui se trouve dans un autre fichier, il y'a la possibilité d'utiliser le mot clé extern. je pense que lui c'est un héritage du C. renseignes toi dessus. mais sinon tu peux tout simplement te créer des headers et y mettre les prototypes de tes fonctions à l'interieur puis tu fais des includes. mais je pense que le mot clé extern suffit s'il s'agit juste d'une variable.

    Mais sinon moi personnellement je ne peux me permettre de trop commenter ton code parce que le coté syntaxe c'est pas vraiment trop ça.

  4. #4
    Membre averti
    Homme Profil pro
    Doctorant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Merci de vos réponses rapides !

    Oui oui c'est bien sous Qt ! M'enfin du peu que je connais de C++ ça me paraît en être quand même.

    mais en ce qui concerne le reste du code je ne saurais dire. la façon dont tu declares les classes ou bien ta façon de faire de l'heritage, je suis vraisemblablement choqué .
    Je n'en doute pas une seconde.

    Je ne vois pas ton soucis, la valeur de var1 est retournée par la fonction, donc à l'appel, var3 contient la valeur de var1.
    Oui mais ça ne fonctionne pas dans mon cas. Le problème doit plutôt venir de la valeur qui s'affecte à boxVar1 du coup, sans doute dans le .ui qu'il faut que je regarde. Mais surtout que ça fonctionne pour d'autres fonctions plus ou moins similaires mais je n'arrive pas à reprendre le même mécanisme...

    il y'a la possibilité d'utiliser le mot clé extern
    De ce que j'ai compris en fouillant un peu ça me sert à déclarer une fonction que je peux utiliser partout à ma guise mais pas la valeur. Ce qui m'intéresse ici c'est que la valeur qui m'est retournée dans un fichier .cpp soit lisible dans un autre. Après oui si la fonction est définie pourquoi pas mais je n'y arrive pas en tout cas. De toute façon avec le extern j'ai un beau illegal storage

    mais sinon tu peux tout simplement te créer des headers et y mettre les prototypes de tes fonctions à l'interieur puis tu fais des includes
    Je vais essayer ça peut-être du coup mais ça me paraît compliqué pour une petite chose que je veux faire en fait. M'enfin merci beaucoup du moins ça me fait avancer et essayer d'autres choses !

  5. #5
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    Ton problème vient du fait que tu essaies de mélanger deux rôles différents dans ta fonction et que, ainsi, tu t'emmêles les pinceaux.

    Admettons que ta variable boxVar1 soit un pointeur vers un QSpinBox. (Ce n'est peut-être pas son type, mais le raisonnement serait le même avec un autre.)

    Si tu veux simplement récupérer l'état de ton QSpinBox, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int MaClasse::GetValeurDeMonQSpinBox() {
        return boxVar1->value();
    }
    Il n'y a aucune raison que MaClasse::GetValeurDeMonQSpinBox ait un paramètre et encore moins qu'elle soit un slot.

    Mais si tu veux qu'une fonction soit appelée automatiquement chaque fois que ton QSpinBox change de valeur, là, par contre, il faut bien créer un slot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MaClasse
    {
    public slots:
        void FonctionAppeleeQuandMonQSpinBoxChangeDeValeur(int nouvelleValeur);
    };
    et connecter le signal void QSpinBox::valueChanged(int i) de ton QSpinBox au slot de ton objet.
    Ce slot n'a aucune raison de retourner une valeur, donc le type de retour est void.

    Note qu'un signal peut être connecté à plusieurs slots et que ces slots n'ont pas forcément besoin d'être dans MaClasse.

    Pour aller plus loin, il faut apprendre les notions de signaux et de slots de Qt, par exemple avec cette page : http://doc.qt.io/qt-5/signalsandslots.html

  6. #6
    Membre averti
    Homme Profil pro
    Doctorant
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Merci beaucoup ! Le soucis n'était pas exactement là finalement, j'ai déclaré dans une autre en-tête sous struct et ça fonctionne, je récupère bien ce que je veux maintenant !

    En tout cas merci pour le temps passé et le lien !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2013, 11h46
  2. [XL-2003] Récupérer une valeur calculée sur un sheet pour le renvoyer dans une listbox
    Par Thierry2B dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/01/2011, 09h55
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  4. Réponses: 0
    Dernier message: 22/05/2007, 12h06
  5. Réponses: 2
    Dernier message: 11/12/2004, 21h20

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