2012-03-13 11 views
5

मैं इसचर आकार वस्तु आरंभ नहीं किया जा सकता है

class aClass 
{ 
    public: 
    aClass() : N(5) {} 
    void aMemberFunction() 
    { 
     int nums[N] = {1,2,3,4,5}; 
    } 
    private: 
    const int N; 
}; 

की तरह एक वर्ग परीक्षण कोड

int main() 
{ 
    aClass A; 
    A.aMemberFunction(); 

    const int N = 5; 
    int ints[N] = {5,4,3,2,1}; 
    return 0; 
} 

है जब मैं (छ ++ 4.6.2 20,111,027) संकलन है, मैं त्रुटि मिलती है

problem.h: In member function ‘void aClass::aMemberFunction()’: 
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized 

अगर मैं int nums[N] के साथ लाइन बाहर टिप्पणी मैं एक संकलन त्रुटि है, तो 012 के लिए इसी तरह के कोड नहीं मिलता हैसरणी ठीक है। N का मान संकलन समय पर ज्ञात नहीं है?

क्या चल रहा है? nums क्यों एक चर-आकार का सरणी माना जाता है? एरे nums और ints अलग-अलग हैंडल क्यों हैं?

+1

सी ++ सरणी में उनके आकार के लिए निरंतर अभिव्यक्ति की आवश्यकता होती है। यानी यह एक संकलन-समय स्थिर होना चाहिए, लेकिन आपके उदाहरण में एन को शाब्दिक रूप से प्रारंभिक रूप से प्रारंभ किया गया है। – AraK

+0

ध्यान दें कि 'gcc' वास्तव में सी में चर लंबाई सरणियों ++ एक विस्तार के रूप तुम सिर्फ (http://stackoverflow.com/a/27339171/1708801) –

उत्तर

9

N का मूल्य संकलन समय पर ज्ञात नहीं है?

समय aMemberFunction पर नहीं। संकलित किया गया है, संकलक अब नहीं है क्या N, क्योंकि अपने मूल्य रन-टाइम में निर्धारित किया जाता है। यह देखने के लिए पर्याप्त स्मार्ट नहीं है कि केवल एक कन्स्ट्रक्टर है, और मानता है कि N का मान 5.

+0

धन्यवाद, कि समझ में आता है [उनकी तरह कि प्रारंभ नहीं कर सकते हैं] समर्थन करते हैं। – stardt

+0

सी ++ कंपाइलर मेरे लिए पर्याप्त स्मार्ट नहीं दिखता है, हालांकि कई अन्य मुख्य स्ट्रीम भाषाएं इनट्स [एन] तरीके से एक सरणी शुरू करने का समर्थन कर सकती हैं। –

3

N आपके उदाहरण में संकलन समय पर ज्ञात नहीं है, लेकिन यह इस में है:

class aClass 
{ 
    private: 
    static const int N = 5; 
    public: 
    aClass() {} 
    void aMemberFunction() 
    { 
     int nums[N] = {1,2,3,4,5}; 
    } 
}; 

ऊपर कोड संकलन होगा, और पांच int रों की एक स्थानीय सरणी घोषित करेंगे।

+0

क्या वेरिएबल सरणी बनाने का कोई तरीका है? उपयोगकर्ता को प्रवेश करने के आधार पर मुझे एक्स की संख्या की संख्या रखने की आवश्यकता है, मेरे पास यह जानने का कोई तरीका नहीं है कि वे क्या दर्ज करेंगे ताकि यह * चर * हो। – MarcusJ

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