2009-10-22 31 views
7

Ben özel bir sınıf içinde bir yapı bildirmek istiyorum ve aynı yapı içinde bir değişkene bir karakter değeri vermek istiyorum, ama bunu ona bir başlangıç ​​veya cin olamaz:Bir sınıf içinde bir yapıyı nasıl bildiririm?

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

Bu ödev etiketine sahip mi? – luke

cevap

20

Sen' bir yapı olan "p" adlı bir türü tanımlar. Etrafında hiç p tipi yok. Bu nedenle,

p->... 

çağrılarınız anlamsızdır.

deneyin, sınıfında

p pInstance; 

ilan ve bunu kullanarak yani: bu dizi için izin endeksleri gibi başarısız olur hatta bu isim [25] için atama ile

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

Not 0 ila 24 (toplam 25 eleman).

6

o

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

değil

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

değil mi?

3

Yazım tanımını typedef kullanarak sınıfın dışına yerleştirin. .cpp dosyanızda tanımlanan yapıya sahip olmanız, sınıfınızın dışında görünmeyecektir.

#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

Bu bir yapı tip isimli p tanımlar burada

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

iki ciddi sorunları var. Ben ne yapmak istediğini Bu isim ve sınıf üyesi değişkenleri ile, s adında bir yapı, ilan edecek

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

olduğunu düşünüyorum.

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

Bu dizi adının 26 elemana 'g' atar:

Kişisel ikinci ciddi bir sorun atamak olmasıdır. (diziler 0 dizinlidir)

İlgili konular