2010-07-24 22 views
5
" 'टी' के लिए टेम्पलेट तर्क अनुमान नहीं किया जा सका"

त्रुटि है this कोड में:अजीब त्रुटि

//myutil.h 
template <class T, class predicate> 
T ConditionalInput(LPSTR inputMessage, LPSTR errorMessage, predicate condition);  

//myutil.cpp 
template <class T, class Pred> 
T ConditionalInput(LPSTR inputMessage, LPSTR errorMessage, Pred condition) 
{ 
     T input 
     cout<< inputMessage; 
     cin>> input; 
     while(!condition(input)) 
     { 
       cout<< errorMessage; 
       cin>> input; 
     } 
     return input; 
} 

... 

//c_main.cpp 
int row; 

row = ConditionalInput("Input the row of the number to lookup, row > 0: ", 
"[INPUT ERROR]: Specified number is not contained in the range [row > 0]. " 
"Please type again: ", [](int x){ return x > 0; }); 

त्रुटि है:

Error 1  error C2783: 'T ConditionalInput(LPSTR,LPSTR,predicate)' : 
could not deduce template argument for 'T' c_main.cpp  17  1 

मैं घंटों के लिए इसे के साथ संघर्ष कर रहा है लेकिन एक समाधान खोजने के लिए प्रतीत नहीं हो सकता है। मेरा मानना ​​है कि गलती छोटी हो सकती है, लेकिन मुझे किसी और परिस्थिति में त्रुटि का सामना करने में कोई और नहीं मिला। बहुत सराहना की मदद करें!

संपादित करें: फ्रेडरिक स्लिमकरमैन द्वारा किए गए सुधार एक मुद्दे को हल करता है लेकिन दूसरा बनाता है। इस बार त्रुटि है:

Error 1 error LNK2019: unresolved external symbol "int __cdecl ConditionalInput<int,class `anonymous namespace'::<lambda0> >(char *,char *,class `anonymous namespace'::<lambda0>)" ([email protected]<lambda0>@[email protected]@@@YAHPAD0V<lambda0>@[email protected]@@Z) referenced in function _main 

कृपया मेरे साथ भालू और इस समस्या को हल करने में मेरी सहायता करें।

उत्तर

6

सी ++ फ़ंक्शन के रिटर्न प्रकार को कम नहीं कर सकता है। यह केवल अपने तर्कों के साथ काम करता है। आपको स्पष्ट रूप से ConditionalInput<int>(...) पर कॉल करना होगा।

+0

संपादित, <> को lt/gt द्वारा प्रतिस्थापित करने की आवश्यकता है। – Scharron

+0

उपर्युक्त उत्तर की टिप्पणियों में सही उत्तर। हालांकि इस उपयोगकर्ता के लिए क्रेडिट है। – Johnny

3

उपयोग

row = ConditionalInput<int>(...) 

वापसी प्रकार स्पष्ट रूप से निर्दिष्ट करने के लिए।

+0

मैं दूसरा टेम्पलेट प्रकार निर्दिष्ट करने की जरूरत नहीं है? – Johnny

+1

कोई आवश्यकता नहीं, तर्क के लिए कटौती कार्य करता है। – Scharron

+0

उसके बाद मुझे एक और त्रुटि मिली है, यह मुझे मुझे और भी सिरदर्द दे रहा है। यह इस तरह है: त्रुटि त्रुटि LNK2019: अनसुलझे बाह्य प्रतीक "पूर्णांक __cdecl ConditionalInput > (चार *, चार *, वर्ग 'गुमनाम नाम स्थान' :: )" (?? ? $ ConditionalInput @ एचवी @ A0x109237b6 @@@@ YAHPAD0V @ A0x109237b6 @@@ जेड) _main \t सी समारोह में संदर्भित: \ Users \ Codemaster \ दस्तावेज \ विजुअल स्टूडियो 2010 \ परियोजनाओं \ Challenge8 - पास्कल त्रिभुज \ Challenge8 - पास्कल त्रिकोण \ c_main.obj \t चुनौती 8 - पास्कल त्रिकोण – Johnny

0

मैंने देखा है कि आपको पहले रिटर्न प्रकार निर्दिष्ट करने की आवश्यकता है यदि इसे स्पष्ट रूप से Conditional<int>(...) कहा जाता है।

template <class T, class A> 
T function (A) { ... } 

जबकि निम्न त्रुटियां संकलन उत्पादन होगा:

template <class A, class T> 
T function (A) { ... } 
संबंधित मुद्दे