2009-10-22 15 views
7

मैं एक वर्ग है जो निजी है के भीतर एक struct घोषित करने के लिए करना चाहते हैं और मैं एक ही struct में एक चर करने के लिए एक चरित्र मूल्य देना चाहता हूँ, लेकिन मैं इसे प्रारंभ या 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 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

टाइपिफ़ का उपयोग कर कक्षा के बाहर संरचना परिभाषा रखें। अपनी .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; 
}; 

यह एक struct प्रकार, नामित पी परिभाषित करता है। मुझे लगता है कि आप क्या करना चाहते थे

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

यह नाम और ग्रेड सदस्य चर के साथ, एक struct, पी नामित घोषित करेंगे।

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

यह सरणी नाम के 26 वें तत्व को 'जी' प्रदान करती है:

आपकी दूसरी गंभीर समस्या यह है कि आप निर्दिष्ट करते हैं। (सरणी 0-अनुक्रमित हैं)

संबंधित मुद्दे