2009-10-30 5 views
2

D'accord, j'ai quelque chose comme ça en C++:accès variable à l'intérieur setter struct getter dans un C++ classe

class MyClass{ 
private: 
    int someVariable; 
    int someOtherVariable; 

    struct structName{ 
    int someStructVariable; 
    int someOtherStructVariable; 
    };//end of struct 

public: 
    //getters & setters for the defined variables. 

    int getSomeStructVariable() 
    { 
    // this does not work I get this error: "error: expected primary-expression 
    // before '.' token" 
    return structName.someStructVariable; 
    } 
};//end of class 

Comment dois-je écrire mon getter ou setter dans ce cas?

Répondre

9

structName fait partie du nom du type, pas du nom de la variable. Vous devez lui donner un nom, quelque chose comme:

struct structName { 
    int someStructVariable; 
    int someOtherStructVariable; 
} myStructure; 

Et puis dans l'utilisation accesseur:

return myStructure.someStructVariable; 

Cela devrait vous obtenir le résultat souhaité. D'autres alternatives pour la variable de la structure doivent séparer la définition de la structure de la déclaration de variable:

struct structName { 
    int someStructVariable; 
    int someOtherStructVariable; 
}; 

struct structName myStructure; 

ou pour ajouter à typedef:

typedef struct structName { 
    int someStructVariable; 
    int someOtherStructVariable; 
} structTypedefName; 

structTypedefName myStructure; 
+1

Battez-moi. +1 – Marcin

+2

Pas besoin de typedef pour supprimer la clé de classe struct, 'struct Name {}; Nom variable, 'fonctionne bien. –

+0

O RLY? Je ne suis pas un gars C++, j'ai peur. C nécessite définitivement le 'typedef'. Je suppose que c'est logique. C++ ne nécessite pas le mot clé 'class' lorsque vous déclarez des instances. –

1
struct A { 
    A() : _n(0) {} 
    int get_n() const { 
    return _n; 
    } 
    void calculate(int a) { 
    _n = a * a * a; 
    } 
private: 
    int _n; 
}; 

Voici un exemple complet. Si vous voulez un miroir set_n au lieu de quelque chose qui manipule les données, alors vous devriez probablement laisser tomber le getter/setter (comme vous les utiliseriez incorrectement) et rendre le membre de données public.

Aussi, rappelez-vous: la définition des classes avec struct travaille identique à la définition des classes avec class mais pour une exception près: public plutôt privé que l'accès par défaut pour les membres et les bases.

+0

Maintenant que quelqu'un a gentiment édité le code, je vois que j'ai mal lu le problème. (D'oh.) Je vais laisser la réponse de toute façon. –

Questions connexes