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 :

ui <no such value>


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut ui <no such value>
    bonjour
    je suis en train de crée mon premier projet avec deux classe qui doive communiquer l'une avec l'autre et l'autre avec l'une de cette façon : client affiche des message dans userInterface et userInterface fourni au client des information tel que le clique sur un bouton est le contenus de certaine boite.
    pour faire ca j'ai défini dans le cpp de client ces deux ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "userinterface.h"
    userinterface *ui;
    et dans celui de userInterface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "clients.h"
    clients *client;
    je me pred aucune erreur jusqu'au moment de la compilation ou lorsque je clique sur un bouton il se passe ca :
    Nom : Capture d’écran 2021-10-16 170025.png
Affichages : 185
Taille : 20,5 Ko
    pour avoir cette erreur la classe userInterface lance au moment ou le bonton est presser la fonction connectTo dans client le client va ensuite aficher un texte dans userInterface en passent par la fonction qui ne fonctionne pas
    voila a mon avis l'erreur vien de moi mais je ne sait pas comment je suis sensé la résoudre
    merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Donc pour définir 1 méthode userinterface::displayMessage, tu utilises 1 variable globale ui du même type ?

    Soit il te manque des notions en programmation objet soit il manque des include pour chopper ta variable globale (mais cela sent les inclusions infinies)

  3. #3
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour
    au début je voulais faire que 1 hérite de 2 et que 2 hérite de 1 mais ca ne peut pas marcher a cause des inclusion circulaire j'avais trouver ca en recherchant mais ducoup ca marche pas comment je suis sensé faire ?

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Il faudrait que tu en montres un peu plus pour qu'on t'aide. Tu as un pointeur ui, tu l'as initialisé quelquepart?
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par skeud Voir le message
    Il faudrait que tu en montres un peu plus pour qu'on t'aide. Tu as un pointeur ui, tu l'as initialisé quelquepart?
    Pas besoin

    ui est 1 variable globale nécessaire pour Qt, et qui regroupe tous les éléments de sa fenêtre.
    Après je ne suis pas expert en Qt, je peux me tromper ... c'est pour cela que j'attendais qu'1 développeur qui connaisse Qt réponde.
    Donc, tu ne dois pas utiliser cette variable pour définir ta classe. D'ailleurs, cela ne se fait jamais de définir des classes/ fonctions/ procédures avec 1 variable globale ... à moins d'1 besoin ultra spécifique.

    C'est pour cela que je disais "il te manque des notions en programmation objet" pour définir la méthode XXX::do_work tu n'as pas besoin de créer 1 variable de type XXX

  6. #6
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour,
    je m'explique j'ai deux classe : une pour géré l'interface et une autre pour gérer une autre classe (un client de serveur) mais le client doit pouvoir interagir avec la classe interface (faire appel a des fonctions) et il faut que la classe d'interface puisse interagir avec la classe client. pour ca je m'était dans client.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "userinterface.h"
    userinterface *ui;
    et dans userinterface.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "clients.h"
    clients *client;
    voila je faisait ca pour éviter une inclusion infini.
    je ne sait pas si j'ai mal organiser mon code mais je ne sait pas comment faire pour que deux classe puisse interagir entre elle...
    pouvez vous m'éclairer ou il vous faut du code ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par eneediorio Voir le message
    je ne sait pas comment faire pour que deux classe puisse interagir entre elle...
    Je le redis "il te manque des notions en programmation objet"

    On peut utiliser l'injection de dépendance (<- lien wikipedia succinct en français), l'amitié (mot clef friend), ...

    Mais il faudrait voir ton code, mais cela sent mauvais. Le client c'est le contrôleur et la variable ui c'est la vue (je peux me tromper, je ne suis pas expert en Qt) donc tu sembles être entrain de coder 1 MVC (<- Est-ce étonnant en codant 1 IHM avec Qt )

    Donc voila, tu n'as pas besoin de tes variables globales. Renseigne toi avec

  8. #8
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    Pas besoin
    Pas besoin d'initialiser un pointeur? C'est bien la première fois qu'on me sort ça.

    Le message d'erreur inqiquerait que le pointeur n'est pas initialiser (donc plantage lors de l'execution).

    Toi tu fais référence à la variable membre "ui" qui est créé lorsque tu utilises QtDesigneur, or la ça n'a rien à voir comme ui est un pointeur sur une classe qu'il a lui-même fait.


    Donc je réitère, il va falloir montrer plus de code pour qu'on sache vraiment le problème,et ce que tu as voulu faire, car en l'état on a l'impression que tu as des variables globales qui ne sont pas initialisées
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par skeud Voir le message
    Pas besoin d'initialiser un pointeur? C'est bien la première fois qu'on me sort ça.
    Ton commentaire est à côté de la plaque Évidement que le pointeur est non initialisé et j'ai dit "soit il manque des include pour chopper ta variable globale (mais cela sent les inclusions infinies)"

    Mais lisez le tutorial de Qt
    Using a Designer UI File in Your C++ Application (<- lien officiel en anglais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class CalculatorForm : public QWidget
    {
        Q_OBJECT
     
    /* */
     
    private:
        Ui::CalculatorForm ui;
    };
    Ton ui n'est pas 1 variable globale, c'est 1 membre/ attribut (<- Est-ce étonnant en codant 1 MVC).
    En essayant de résoudre le pointeur non initialisé, tu résous le mauvais problème.

    Le P.O. ne semble n'avoir jamais fait de programmation IHM : "il lui manque des notions en programmation objet"


    Édit : c'est bizarre, tout cela c'est du code généré Qt et donc tu n'as pas besoin de modifier la "structure du projet".
    C'est bizarre "no such value" alors que c'est 1 code généré ... mais je ne suis pas expert Qt

  10. #10
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour
    la variable ui pointe juste vers la classe user interface il est défini dans client.cpp il ne pointe en aucun cas vers le vrais ui.
    mais je vais me résigner sur l' Injection de dépendances. si vous avez des tips je suis ouvert

  11. #11
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    Ton ui n'est pas 1 variable globale, c'est 1 membre/ attribut (<- Est-ce étonnant en codant 1 MVC).
    En essayant de résoudre le pointeur non initialisé, tu résous le mauvais problème.

    Le P.O. ne semble n'avoir jamais fait de programmation IHM : "il lui manque des notions en programmation objet"


    Édit : c'est bizarre, tout cela c'est du code généré Qt et donc tu n'as pas besoin de modifier la "structure du projet".
    C'est bizarre "no such value" alors que c'est 1 code généré ... mais je ne suis pas expert Qt
    Normal que ça te semble bizarre, ce n'est pas parceque la varibale s'appelle ui que ça provient du code généré par Qt. Relis bien le code et tu verras que ce n'est pas du code généré.bref.

    Voilà une piste pour les dépendance multiple:

    A.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class B;
     
    class A
    {
    public:
      void setB(B* ptr) { m_ptrToB = ptr;}
      void fonctionQuiFaitAppelleAB();
    private:
      B* m_ptrToB = nullptr;
    }
    A.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "A.h"
    #include "B.h"
     
    A::A()
    {
    }
     
    void A::fonctionQuiFaitAppelleAB()
    {
      m_ptrToB->appelle();
    }
    B.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A;
     
    class B
    {
    public:
      void setA(A* ptr) { m_ptrToA = ptr;}
      void fonctionQuiFaitAppelleAA();
    private:
      A* m_ptrToA = nullptr;
    }
    B.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "B.h"
    #include "A.h"
     
    B::B()
    {
    }
     
    void B::fonctionQuiFaitAppelleAA()
    {
      m_ptrToA->appelle();
    }
    ça s'appelle la forward declaration. En gros via :
    Tu indique au compilo qu'une class A existe et que tu la définira plus tard (dans le cpp en l'occurence). Celà fonctionne à condition que dans le .h tu n'utilise qu'un pointeur et aucune des fonctions de B (pour ça il faut attendre qu'elle soit déclarée et donc dans le cpp)
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  12. #12
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour,
    j'ai essayé les info de skeud
    Voilà une piste pour les dépendance multiple:...
    mais il y a ces problèmes la : Nom : Capture d’écran 2021-10-21 225501.png
Affichages : 116
Taille : 106,3 Ko
    mon code :
    client .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        void setB(userinterface* ptr) { m_ptrToUserinterface = ptr;}
        void fonctionQuiFaitAppelleAUserinterface();
    private:
        userinterface* m_ptrToUserinterface = nullptr;
    client.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void clients::fonctionQuiFaitAppelleAUserinterface()
    {
      m_ptrToUserinterface->displayMessagelist("hello word");
    }
    userinterface.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public:
        void setA(clients* ptr) { m_ptrToClients = ptr;}
        void fonctionQuiFaitAppelleAClients();
    private:
        clients* m_ptrToClients = nullptr;
    userinterface.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void userinterface::on_conectbuton_clicked()
    {
        m_ptrToClients->fonctionQuiFaitAppelleAUserinterface();
    }
    j'ai fait une erreur ?

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par eneediorio Voir le message
    j'ai fait une erreur ?
    Tu es sérieux ?

    Ton pointeur est NULL parce qu'il est initialisé mais jamais configuré avec le mutateur ("setter" en anglais) void setB(userinterface* ptr) { m_ptrToUserinterface = ptr;}.

    Lis les tutoriaux Qt, MVC par exemple ... pour savoir comment faire le lien entre la vue <-> le contrôleur <-> la couche de données

  14. #14
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    void setB(userinterface* ptr) { m_ptrToUserinterface = ptr;}
    je lai mis dans
    client .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        void setB(userinterface* ptr) { m_ptrToUserinterface = ptr;}
        void fonctionQuiFaitAppelleAUserinterface();
    private:
        userinterface* m_ptrToUserinterface = nullptr;
    si je le met dans le cpp j'ai une erreur que faut il faire ?
    Lis les tutoriaux Qt, MVC par exemple ... pour savoir comment faire le lien entre la vue <-> le contrôleur <-> la couche de données
    ok je vais faire ca

  15. #15
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lis les tutoriaux Qt, MVC par exemple ... pour savoir comment faire le lien entre la vue <-> le contrôleur <-> la couche de données
    bon j'en ai lue plein est je comprend jamais vous pouvez me suggérer s'il vous plais

Discussions similaires

  1. QImage <no such value>
    Par Momoth dans le forum Débuter
    Réponses: 4
    Dernier message: 30/10/2014, 16h56
  2. Calcul du plu court chemin entre 2 sommets d'un graphe valué
    Par atlasm dans le forum Algorithmes et structures de données
    Réponses: 25
    Dernier message: 07/08/2005, 17h06
  3. [MFC]Value Controle dans un comboBox
    Par jul54 dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2004, 09h57
  4. Réponses: 4
    Dernier message: 18/11/2003, 16h08
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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