2009-10-22 31 views
7

tôi muốn tuyên bố một struct trong một lớp học này là riêng tư và tôi muốn đưa ra một giá trị nhân vật cho một biến trong struct nhau, nhưng tôi không thể khởi tạo nó hay cin nó:Làm cách nào để khai báo cấu trúc trong một lớp?

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

Điều này có nên có thẻ bài tập về nhà không? – luke

Trả lời

20

Bạn' đã mô tả một loại được gọi là "p" là một cấu trúc. Vẫn chưa có loại p xung quanh. Do đó, số điện thoại

p->... 

không có ý nghĩa.

Cố gắng tuyên bố

p pInstance; 

trong lớp học của bạn và sử dụng nó, ví dụ:

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

Lưu ý ngay cả với này phân công của bạn để tên [25] sẽ thất bại khi các chỉ số cho phép đối với mảng mà 0 lên đến 24 (tổng cộng 25 phần tử).

6

không phải là nó

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

không

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

?

3

Đặt định nghĩa cấu trúc bên ngoài lớp bằng cách sử dụng typedef. Bằng cách có cấu trúc được định nghĩa trong tệp .cpp của bạn, nó sẽ không hiển thị bên ngoài lớp của bạn.

#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

Bạn có hai vấn đề nghiêm trọng ở đây

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

này định nghĩa một struct loại, tên p. Tôi nghĩ rằng những gì bạn muốn làm là

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

này sẽ khai báo một struct, tên p, với tên và thành viên lớp biến.

vấn đề nghiêm trọng thứ hai của bạn là bạn gán:

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

này gán 'g' tới phần tử thứ 26 của tên mảng. (các mảng được lập chỉ mục 0)

Các vấn đề liên quan