2011-06-24 18 views
7

मैं टेम्पलेट्स के लिए नौसिखिया हूं इसलिए कृपया मुझे बेवकूफ सवालों के लिए क्षमा करें। मैं इस कोड में त्रुटियों को हो रही है:"क्लास टेम्पलेट के उपयोग के लिए टेम्पलेट तर्क सूची" का क्या अर्थ है?

template <class t> 
class a{ 
public: 
    int i; 
    a(t& ii):i(ii){} 
}; 


int main() 
{ 
    a *a1(new a(3)); 
    cout<<a1.i; 

    _getch(); 
} 

संकलित त्रुटियों:

  1. 'a' : use of class template requires template argument list
  2. 'a' : class has no constructors
+10

मैं इसे सवाल downvote करने के लिए, सिर्फ इसलिए कि अनुभवहीन कुछ कहा जा रहा है ... मैं डॉन अच्छा है नहीं लगता कि

और फिर ऐसा करने ऐसा नहीं लगता कि आप, श्रीडाउनवॉटर, कभी भी अपने पेशेवर जीवन में इस चरण को पारित नहीं करते हैं जब कुछ स्पष्ट है क्योंकि यह आपके लिए स्पष्ट नहीं था –

+3

धन्यवाद बहुत सारे दोस्तों !! आप पीपीएल को एक महान जगह बनाते हैं ... बेवकूफ क्यूएस का जवाब बिना हास्यास्पद के :) :)) –

+0

@ आर्मेन: निष्पक्ष होने के लिए, हम एक प्रश्न के बारे में बात कर रहे हैं कि अस्तित्व में कोई भी सी ++ पुस्तक उत्तर देगी। –

उत्तर

6
a(t& ii):i(ii){} 

यह होना चाहिए:

a(const t& ii):i(ii){} 

ताकि आप निर्माता के लिए स्थिरांक शाब्दिक, और temporaries पारित कर सकते हैं ।

a<int> *a1(new a<int>(3)); 

तुम भी लिख सकते हैं::

a<int> a2(3); 
+1

आपको बहुत कुछ !! –

+0

आपके पास टेम्पलेट में गलत प्रकार है। यह निश्चित रूप से ' * ए 1 (नया (3)) होना चाहिए; 'बस सुनिश्चित करें कि फू बार int में परिवर्तनीय है। –

+1

@ मार्टिन: क्यों? : -/ – Nawaz

10

उपयोग

a<int> *a1(new a<int>(3)); 
^^^^^   ^^^^ 

आप पानी तो अपने टेम्पलेट पैरामीटर nt स्वचालित रूप से निष्कर्ष निकाला जा करने के लिए, आप एक सहायक समारोह का उपयोग कर सकते हैं:

template<class T> 
a<T> * createA (const T& arg) //please add const to your ctor, too. 
{ 
    return new a<T>(arg) 
} 
+0

पुस्तक के माध्यम से खोजने में बहुत समय व्यतीत करके किया जा सकता है, क्या मैं नम्रता से पूछूंगा कि डाउनवोट क्या था? अर्धविराम के लिए मैं भूल गया? –

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