2013-02-21 16 views
43

मैं अपने कोड के साथ निम्न समस्या हो रहा है:सरणी [n] सरणी बनाम [10] - चर के साथ सरणी आरंभ किया जा रहा बनाम वास्तविक संख्या

int n = 10; 
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

निम्न त्रुटि देता है:

error: variable-sized object 'tenorData' may not be initialized 

जबकि double tenorData[10] का उपयोग कर काम करता है।

कोई भी जानता है क्यों?

+4

यह एक भाषा देने में मदद करेगा। सी ++ में उस फ़ॉर्म के आपके सरणी को संकलन-समय निरंतर आकार होना चाहिए। – OrangeAlmondSoap

+0

सी ++, mingw32-g ++ संकलक के साथ Codeblocks का उपयोग कर! – msmf14

+0

धन्यवाद, जस्टिन और @AndrewVarnerin, जिसने इसे हल किया! int से पहले जोड़ा गया कॉन्स: const int n = 10; हल हो गया! – msmf14

उत्तर

106

सी ++ में, परिवर्तनीय लंबाई सरणी कानूनी नहीं हैं। जी ++ (सी ++ मानक का पालन के बारे में -pedantic किया जा रहा बिना) एक "विस्तार" (क्योंकि सी यह अनुमति देता है), जी में तो ++ के रूप में इस की अनुमति देता है, तो आप कर सकते हैं:

int n = 10; 
double a[n]; // Legal in g++ (with extensions), illegal in proper C++ 

आप एक "चर लंबाई सरणी" चाहते हैं (बेहतर है, एक "गतिशील आकार सरणी" C++ कहा जाता है के बाद से उचित चर लंबाई सरणियों की अनुमति नहीं है), तो आप या तो गतिशील स्मृति अपने आप को आवंटित करने के लिए है:

int n = 10; 
double* a = new double[n]; // Don't forget to delete [] a; when you're done! 

या, बेहतर अभी तक, एक मानक कंटेनर का उपयोग करें:

int n = 10; 
std::vector<double> a(n); // Don't forget to #include <vector> 

आप अभी भी एक उचित सरणी चाहते हैं, आप एक निरंतर, नहीं एक चर, जब यह बनाने का उपयोग कर सकते हैं:

const int n = 10; 
double a[n]; // now valid, since n isn't a variable (it's a compile time constant) 

इसी तरह, आप में सी + एक समारोह से आकार प्राप्त करना चाहते हैं, तो +11, आप constexpr का उपयोग कर सकते हैं:

constexpr int n() 
{ 
    return 10; 
} 

double a[n()]; // n() is a compile time constant expression 
+1

धन्यवाद, यह एक और अच्छा समाधान है। अंत में मुझे वास्तव में क्या चाहिए एक सरणी के बजाय एक वेक्टर है! – msmf14

+0

@ msmf14: हाँ, मानक कंटेनर, जैसे 'वेक्टर', अविश्वसनीय रूप से उपयोगी हैं। – Cornstalks

+0

क्या वेक्टर समाधान प्रत्येक तत्व को प्रारंभ करते हैं जब आप "std :: vector <[कुछ वर्ग]> a (n)" कहते हैं; "? – Justin

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