2013-04-22 9 views
7

मेरे पास एक सरणी टेम्पलेट वर्ग में * ऑपरेटर को परिभाषित करने के लिए लिखा गया एक बहुत ही सरल प्रोग्राम है। जब मैं संकलन करने का प्रयास करता हूं तो यह मुझे "अवैध संकेत" त्रुटि देता है। इस मामले पर किसी भी मदद की सराहना की जाएगी!त्रुटि C2100 - अवैध संकेत

इस ऑपरेटर परिभाषा है:

template <typename T>                 
NumericArray<T> NumericArray<T>::operator * (const int factor) const 
{ 
NumericArray<T>* TempArray2 = new NumericArray<T>(Size()); 
for (int i=0; i<Size(); i++) 
{ 
    *TempArray2[i] = ((GetElement(i))*(factor)); 
} 
return *TempArray2; 
} 

और यह परीक्षण मुख्य समारोह में दिया गया है:

cout<<((*intArray1)*5).GetElement(0);         
cout<<((*intArray1)*5).GetElement(1); 
cout<<((*intArray1)*5).GetElement(2); 

कोई भी विचार?

उत्तर

10

अपने operator precedence नियमों को न भूलें। ऐसा लगता है कि आप चाहते हैं:

(*TempArray2)[i] 

अन्यथा अपने अभिव्यक्ति *TempArray2[i]*(TempArray2[i]) के रूप में माना जाता है और मुझे लगता है कि अपने NumericArray<T> प्रकार एकल* ऑपरेटर अतिभारित नहीं है।

1

*TempArray2[i] में, * क्योंकि पूर्वता नियमों का TempArray[2] को लागू किया जाता है, और वहाँ एक उचित मौका है कि सरणी तत्वों एक एकल * ऑपरेटर की जरूरत नहीं है है।

लेकिन गतिशील आवंटन का उपयोग और उसके बाद मान द्वारा वापस लौटने का मतलब है कि आपके पास स्मृति रिसाव है।
(आप new की जरूरत नहीं है सी में वस्तुओं ++ बनाने के लिए - आप शायद या तो main में इसका इस्तेमाल करने की जरूरत नहीं है।)

यह बेहतर होगा (और पूरे अविवेक मुद्दे से बचा जाता है):

template <typename T>                 
NumericArray<T> NumericArray<T>::operator * (int factor) const 
{ 
    NumericArray<T> TempArray(Size()); 
    for (int i = 0; i < Size(); i++) 
    { 
     TempArray[i] = GetElement(i) * factor; 
    } 
    return TempArray; 
} 
संबंधित मुद्दे