2009-10-22 2 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; 

를 선언하고 사용 예 : 해당 배열에 대한 허용 인덱스는 같은 실패에도이 이름이 [25]에 대한 과제와

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

주 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

당신은이 구조체 유형라는 페이지를 정의 여기

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

두 가지 심각한 문제가있다. 나는 당신이하고 싶었던 것은이 이름과 등급의 멤버 변수, P라는 구조체를 선언합니다

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

생각.

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

이 배열 이름의 26 요소에 'g'를 할당합니다

두 번째 심각한 문제는 당신이 할당하는 것입니다. (배열은 0 인덱싱 됨)

관련 문제