وظائف templated .. خطأ: معرف القالب لا يتطابق مع أي إعلان قالب
-
30-09-2019 - |
سؤال
لقد كتبت قالب وظيفة و وظيفة templated متخصصة بشكل صريح الذي يأخذ ببساطة في 3 حجج ويحسب أكبرها ويطبعها.
الوظيفة المتخصصة تسبب خطأ ، في حين أن القالب يعمل بشكل جيد. لكني أريد العمل مع نوع char*.
هذا هو الخطأ الذي أحصل عليه =>error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration
فيما يلي الرمز الخاص بي:
template <typename T>
void Max(T& a,T& b,T& c)
{
if(a > b && a >> c)
{
cout << "Max: " << a << endl;
}
else if(b > c && b > a)
{
cout << "Max: " << b << endl;
}
else
{
cout << "Max: " << c << endl;
}
}
template <>
void Max(char* a,char* b,char* c)
{
if(strcmp(a,b) > 0 )
{
cout << "Max: " << a << endl;
}
else if(strcmp(b,c) > 0)
{
cout << "Max: " << b << endl;
}
else
{
cout << "Max: " << b << endl;
}
}
المحلول
تحتاج إلى أخذ المؤشرات بالرجوع إليها:
template <>
void Max(char*& a,char*& b,char*& c)
ومع ذلك ، سيكون من الأفضل ليس لاستخدام تخصص صريح وبدلاً من ذلك فقط قم بتحميل الوظيفة:
void Max(char* a, char* b, char* c)
إنها فكرة سيئة دائمًا لتخصص قوالب الوظائف. لمعرفة المزيد ، شاهد Herb Sutter's "لماذا لا تتخصص قوالب الوظائف؟"
نصائح أخرى
واجهت نفس المشكلة وأصلحتها باستخدام typedef:
typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)
لا تنتمي إلى StackOverflow