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 :

typedef et classe


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut typedef et classe
    J'espère que cela ne dérange pas trop si je pose plusieurs questions à la suite sur le forum. Mais vu comme je débute en c j'ai quelques difficultés.

    j'ai deux classes, MLogin et MMenu. Dans ses deux classes j'ai des attributs privées et publiques ainsi que des méthodes. Cependant, dans MLogin j'ai créé un typedef STableau avec différents attributs, et j'aimerai récupérer ses valeurs (de mon typedef) dans MMenu.

    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
    16
    17
    18
    19
     
    #undef  ROUT
    #define ROUT "MLogin::CheckUser"
    typedef struct{ 
                      char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                           Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];
     
                  }STableau;
     
     
    BOOL MLogin::CheckUser()
    {
      //Attributs
      FILE    *fp;
      CHAR    szLine[L_PRM_LINE+1], szPath[_MAX_PATH+1];
      PSZ     pszOpeCod = NULL;
      BOOL    fAuth = FALSE;
      int		  longueur;
      STableau montableau[20];
    j'essaie d'obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MLogin::getSTableau()
    {
      return montableau[0].Login;
    }
    pouvez vous m'aider svp ?

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    avec ce typedef, tu déclares une structure (d'ailleurs le typedef est inutile en C++, la syntaxe est struct MaStruct {...};).
    Ensuite dans ta classe, tu crées un tableau de 20 struct.
    A quel niveau tu bloques pour retourner le champ login de la structure index 0 de ton tableau ?

    j'essaie d'obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MLogin::getSTableau()
    {
      return montableau[0].Login;
    }
    Qu'est-ce qui t'en empêche ? A part que tu ne spécifies pas de type de retour et donc ça plante, mais as-tu au moins essayé de compiler ? De lire les messages d'erreur ? Quels sont-ils ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* Classe::GetLogin() { return monTableau[0].Login; }
    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.

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    si si j'ai deja essayer pas mal de chose avant...

    j'ai déclaré ma méthode dans ma classe Mlogin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* MLogin::GetLogin()
    puis dans mon cpp

    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
    16
    17
    18
    19
    20
    21
     
    #undef  ROUT
    #define ROUT "MLogin::CheckUser"
    typedef struct{ 
                      char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                           Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];
     
                  }STableau;
    char* MLogin::GetLogin() 
    { 
      return monTableau[0].Login; 
    }
     
    BOOL MLogin::CheckUser()
    {
      FILE    *fp;
      CHAR    szLine[L_PRM_LINE+1], szPath[_MAX_PATH+1];
      PSZ     pszOpeCod = NULL;
      BOOL    fAuth = FALSE;
      int		  longueur;
      STableau montableau[20];
    message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    error C2065: 'monTableau' : undeclared identifier
    error C2109: subscript requires array or pointer type
    error C2228: left of '.Login' must have class/struct/union type
    ce n'est pas un problème d'héritage (public,prive de ma structure Stableau) ?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut
    salut,

    tu déclares ton tableau comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    STableau montableau[20];
    puis tu l'utilises comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return monTableau[0].Login;
    c'est pas le même nom ça , exactement ce que te disais ton message d'erreur :

    error C2065: 'monTableau' : undeclared identifier
    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return montableau[0].Login;

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    Je suis pas sûr qu'il s'agisse de copier/coller raté donc:
    - tu ne préfixes pas par MLogin:: un prototype dans le header contenu dans la classe
    - tu ne répètes pas ton typedef dans le .cpp
    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 du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    pardon je me suis trompé en écrivant monTableau[0] dans mon message précédant, mais dans mon code j'ai bien mis montableau... mais j'ai tjrs les memes messages d'erreurs.
    Par contre je suis obligé de mettre typedef struct sinon il n'en veut pas de mon tableau...

  7. #7
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    une structure en C++ se déclare comme ça struct MaStruct {...};et il n'y a pas besoin de typedef
    ta syntaxe est celle du C
    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.

  8. #8
    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 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Ta variable monTableau est une variable locale définie dans une fonction. Tu ne peux donc pas l'utiliser dans une autre fonction.
    Si tu veux pouvoir utiliser cette variable dans plusieurs fonctions, je te conseille de la mettre en variable membre de MLogin.
    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).

  9. #9
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Je ne suis pas obligé de mettre MLogin::GetLogin() (je préfère mettre MLogin:: pour bien comprendre ou je suis)

    dans mon MLogin.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MLogin : public TDialog
    {
    // Construction
    public:
    	MLogin(CWnd* pParent = NULL);	// standard constructor
      char*  GetLogin();
      struct STableau{ 
              char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                   Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];     
             };
    dans mon MLogin.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #undef ROUT
    #define ROUT "MLogin::GetLogin"
    char* MLogin::GetLogin()
    {
      return montableau[0].Login;
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #undef  ROUT
    #define ROUT "MLogin::CheckUser"
     
     
    BOOL MLogin::CheckUser()
    {
      FILE    *fp;
      CHAR    szLine[L_PRM_LINE+1], szPath[_MAX_PATH+1];
      PSZ     pszOpeCod = NULL;
      BOOL    fAuth = FALSE;
      int		  longueur;
      STableau montableau[20];
    erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    error C2065: 'montableau' : undeclared identifier
    error C2109: subscript requires array or pointer type
    error C2228: left of '.Login' must have class/struct/union type

  10. #10
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    j'avais effectivement oublier de mettre mon STableau montableau[20] dans mon MLogin.h quel erreur !!!!!

  11. #11
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    je n'arrive toujours pas à avoir ma valeur :

    MLogin.h :

    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
    16
     
    class MLogin : public TDialog
    {
    private:
     struct STableau{
              char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                   Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];
                    };
     
      STableau montableau[20];
     
     
    // Construction
    public:
    	MLogin(CWnd* pParent = NULL);	// standard constructor
            CString GetLogin();
    MLogin.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #undef ROUT
    #define ROUT "MLogin::GetLogin"
     
    CString MLogin::GetLogin()
    {
      return montableau[0].Login;
      printf("mon tableau %s\n",montableau[0].Login);
    }
     
    MLogin::GetLogin();
    erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error C2556: 'int __cdecl MLogin::GetLogin(void)' : overloaded function 
    error C2371: 'GetLogin' : redefinition; different basic types
    J'ai essayé de changer le type de retour de mon GetLogin par char*, CString... mais j'ai toujours les mêmes erreurs

  12. #12
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    Peut-on voir le header qui définit cette classe au complet ?

    Et que fait/à quoi sert cette macro ROUT ?
    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.

  13. #13
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    MLogin.h

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
     
    * 2011/03/29  wap     Creation
    ****/
    /*********************************************************************************************************************/
    /*                                                 D I R E C T I V E                                                 */
    /*********************************************************************************************************************/
    #ifndef __MLOGIN_H
    #define __MLOGIN_H
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    /*********************************************************************************************************************/
    /*                                                   I N C L U D E                                                   */
    /*********************************************************************************************************************/
    #include "..\inc\ttools.h"
    #include "TDlg.h"
     
    #ifdef USE_PHYSICAL_DEVICE
      #include <ScanCApi.h>
    #endif
     
    /*********************************************************************************************************************/
    /*                                                     C L A S S                                                     */
    /*********************************************************************************************************************/
    //=====================================================================================================================
    //= Name       : MLogin dialog
    //=
    //= Description:
    //=
    //= Remarks    :
    //=====================================================================================================================
    class MLogin : public TDialog
    {
    private:
      CString     m_strOpeCod;  
      BOOL        m_fRetry;       // Mode retry en cas d'échec de récupération du fichier
     
     struct STableau{
              char Ligne[20],Login[20],Site1[4],Site2[4],Site3[4],Site4[4],
                   Auto1[3],Auto2[3],Auto3[3],Auto4[3],Auto5[3];
                    };
     
      STableau montableau[20];
     
     
    // Construction
    public:
    	MLogin(CWnd* pParent = NULL);	// standard constructor
     
      CString GetLogin();
     
     
     
     
     
    // Dialog Data
    	enum { IDD = IDD_LOGIN };
     
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
      virtual void ScanEvent(CString &strScan);
     
      APIRET GetVersionInfo();
      APIRET GetLoginsFile(CString &strCause);
     
      BOOL   ValidateFields();
      BOOL   CheckUser();
      void   SetRetryMode(BOOL fRetry);
     
    // Implementation
    protected:
    	// Generated message map functions
      virtual BOOL OnInitDialog();
     
      DECLARE_MESSAGE_MAP()
    public:
      afx_msg void OnOK();
    public:
    };
     
    //=====================================================================================================================
    //= Name       : DWait
    //=
    //= Description:
    //=
    //= Remarks    :
    //=====================================================================================================================
    pour répondre à ta question sur le ROUT, je ne sais pas du tout à quoi elle sert...

  14. #14
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    je suis arrivé à afficher ma valeur . Pour cela j'ai modifié la syntaxe de ma fonction : void au lieu de string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MLogin::GetLogin()
    {
      printf("ma fonction : %s\n", montableau[0].Login);
    }
    Cependant, j'ai essayé d'appeler ma fonction dans une autre classe, mais j'ai eu un échec. Pourtant ma fonction est déclarer en public...

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

Discussions similaires

  1. Traits pour classes définissant un typedef
    Par Florian Goo dans le forum Langage
    Réponses: 11
    Dernier message: 03/06/2009, 18h09
  2. Pb <<typedef>> class parametrée
    Par bighty dans le forum BOUML
    Réponses: 2
    Dernier message: 15/07/2008, 10h05
  3. Typedefs dans une classe template
    Par olivier1978 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 01h12
  4. typedef dans une class template
    Par yan dans le forum Langage
    Réponses: 2
    Dernier message: 01/10/2007, 10h43
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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