2009-10-22 15 views
7

私はプライベートでクラス内で構造体を宣言したいと私は同じ構造体の変数に文字値を与えたいと思うが、私はそれを初期化するか、またはそれCINすることはできません。クラス内で構造体を宣言するにはどうすればよいですか?

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

これに宿題タグはありますか? – luke

答えて

20

あなたは」構造体である "p"と呼ばれる型を記述します。まだp型のものはありません。したがってあなたの

p->... 

の呼び出しは意味を成しません。

すなわち、あなたのクラスの

p pInstance; 

を宣言し、それを使用してみてください:

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

なお、アレイの許可指標であるとしても、これを[25]名前を付けるあなたの割り当てが失敗します0〜24(合計25要素)。

6

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

ない

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

はないですか?

3

typedefを使用して、クラスの外部に構造体定義を配置します。 .cppファイルに構造体が定義されているため、クラス外には表示されません。

#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

あなたはこれが構造タイプ、pという名前を定義し、ここで

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

2つの深刻な問題を抱えています。私は何をやってみたかったこと。これは、名前と学年メンバ変数で、Pという名前構造体を宣言します

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

だったと思います。

あなたの第二の重大な問題は、あなたが割り当てることです:

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

これは、配列名の26番目の要素に「G」を割り当てます。 (配列は0でインデックス付けされています)

関連する問題