2009-10-22 7 views
7

Je veux déclarer une struct dans une classe qui est privée et je veux donner une valeur de caractère à une variable dans la même structure, mais je ne peux pas l'initialiser ou cin il:Comment déclarer une structure dans une classe?

class puple 
{ 
private: 
    struct p 
    { 
     char name[25]; 
     int grade; 
    }; 
public: 
    puple(){}; 
    void setme() 
    { 
     this->p::grade=99; 
     this->p::name[25]='g'; //here is the problem 
    } 
    void printme() 
    { 
     cout<<"Name: "<<this->p::name<<endl; 
     cout<<"Grade: "<<this->p::grade<<endl; 
    } 
}; 
void main() 
{ 
    puple pu1; 
    pu1.setme(); 
    pu1.printme(); 
} 
+0

Est-ce que ceci devrait avoir l'étiquette de devoir? – luke

Répondre

20

Vous » Je décris un type appelé "p" qui est une struct. Il n'y a pas encore de chose de type p autour. Par conséquent votre

p->... 

appels n'a aucun sens.

Essayez déclarant

p pInstance; 

dans votre classe et de l'utiliser, à savoir:

void setme() 
{ 
    this->pInstance.grade=99; 
    this->pInstance.name[25]='g'; //here is the problem 
} 

note même avec ce votre affectation à nom [25] échouera comme les indices autorisés pour ce tableau sont 0 jusqu'à 24 (totalisant 25 éléments).

6

est pas

struct { ... } p; // variable of struct-type definition. 

pas

struct p { ... }; // type 'struct p' definition. 

?

3

Placez la définition de structure à l'extérieur de la classe à l'aide d'un typedef. En ayant la structure définie dans votre fichier .cpp, elle ne sera pas visible en dehors de votre classe.

#include <iostream> 
typedef struct _foo 
{ 
    int a; 
} foo; 

class bar 
{ 
public: 
    void setA(int newa); 
    int getA(); 
private: 
    foo myfoo; 
}; 

void bar::setA(int newa) 
{ 
    myfoo.a = newa; 
} 

int bar::getA() 
{ 
    return myfoo.a; 
} 

using namespace std; 
int main() 
{ 
    bar mybar; 
    mybar.setA(17); 
    cout << mybar.getA() << endl; 
    return 0; 
} 
13

Vous avez deux problèmes graves ici

struct p 
{ 
char name[25]; 
int grade; 
}; 

Cette définit un type struct , p nommé. Je pense que ce que vous vouliez faire était

struct 
{ 
char name[25]; 
int grade; 
} p; 

Cela déclarera une struct, nommé p, avec le nom et les variables membres de qualité.

Votre deuxième problème grave est que vous attribuez:

this->p::name[25]='g'; //here is the problem 

Cette attribue « g » à l'élément 26 du nom du tableau. (les tableaux sont indexés sur 0)

Questions connexes