2011-04-02 15 views
7

मेरा लक्ष्य है एक वर्ग की तरह:सी ++ वर्ग के सदस्य struct को परिभाषित करने और एक सदस्य समारोह में इसे वापस

class UserInformation 
{ 
public: 
    userInfo getInfo(int userId); 
private: 
    struct userInfo 
    { 
     int repu, quesCount, ansCount; 
    }; 
    userInfo infoStruct; 
    int date; 
}; 

userInfo UserInformation::getInfo(int userId) 
{ 
    infoStruct.repu = 1000; 
    return infoStruct; 
} 

लेकिन संकलक त्रुटि देता है कि सार्वजनिक समारोह getInfo(int) की defintion में वापसी प्रकार userInfo कोई प्रकार नहीं है नाम।

उत्तर

4

आप UserInformation के सदस्यों का क्रम बदलने और getInfo की घोषणा ऊपर struct UserInfoडाल करने के लिए की जरूरत है। संकलक शिकायत करता है कि यह getInfo के लिए हस्ताक्षर नहीं कर सकता है क्योंकि उसने अभी तक इसके रिटर्न प्रकार की परिभाषा नहीं देखी है।

इसके अलावा, यदि आप फ़ंक्शन से संरचना लौट रहे हैं तो संरचना का प्रकार कॉलर्स को दिखाई देना चाहिए। तो आपको संरचना public भी बनाना होगा।

4

यदि सदस्य फ़ंक्शन सार्वजनिक है, तो वापसी का प्रकार सार्वजनिक रूप से दिखाई देना चाहिए! इसलिए, आंतरिक संरचना परिभाषा को public अनुभाग में ले जाएं।

यह भी ध्यान दें कि इससे पहले का उपयोग करने वाले फ़ंक्शन को परिभाषित किया जाना चाहिए।

4

बस UserInformation::userInfo UserInformation::getInfo(int userId) करें।

इसके अलावा, आपको userInfo सार्वजनिक घोषित करना चाहिए।

+0

हमें 'userInfo के लिए क्वालीफायर 'UserInfomation' क्यों चाहिए। डिफ़ॉल्ट रूप से संकलक को 'उपयोगकर्ता जानकारी' के नामस्थान में जांचना नहीं चाहिए? – anaken78

+0

@ anaken78 क्या आप, मैं, या कोई और एक अनुपालन संकलक सोचता है _should_ do अप्रासंगिक है। यह ** ** ** करता है। जब तक फ़ंक्शन की तर्क सूची खुलती नहीं है तब तक कक्षा दायरे में नहीं होती है, इसलिए वहां के नामों को अयोग्य घोषित नहीं किया जा सकता है। मुझे यकीन है कि इसके पीछे तर्क, पार्सिंग और व्हाट्नॉट के मामले में, यदि आप इसे खोजना चाहते हैं, तो कहीं और लंबाई पर चर्चा की गई है। या बस एक पिछला रिटर्न प्रकार का उपयोग करें: 'ऑटो उपयोगकर्ता जानकारी :: getInfo (int userId) -> userInfo' (btw, ये कुछ खराब नामकरण विकल्प हैं)। उस स्थिति में वापसी प्रकार घोषित होने पर कक्षा और उसके सदस्य गुंजाइश में हैं। –

12

नेस्टेड संरचना प्रकार को सार्वजनिक बनाने के लिए यह समझ में आता है, क्योंकि उपयोगकर्ता कोड इसका उपयोग करने में सक्षम होना चाहिए। साथ ही, इसके पहले उपयोग के बिंदु से पहले संरचना की घोषणा करें। कक्षा के दायरे के बाहर घोंसला प्रकार का संदर्भ देने के लिए स्कोप रिज़ॉल्यूशन :: का उपयोग करें।

class UserInformation 
{ 
public: 
    struct UserInfo 
    { 
     int repu, quesCount, ansCount; 
    }; 


public: 
    UserInfo getInfo(int userId); 

private: 
    UserInfo infoStruct; 
    int date; 
}; 

UserInformation::UserInfo UserInformation::getInfo(int userId) 
{ 
    infoStruct.repu = 1000; 
    return infoStruct; 
} 
संबंधित मुद्दे