显式特化 - template-id 不匹配任何模板声明
Explicit specialization - template-id does not match any template declaration
我对 C++ 程序的显式特化有疑问
我想对 char* 类型进行专门化,returns 一个指向最长 char 数组的地址,但我不断收到错误:
C:\Users\Olek\C++_1\main.cpp|6|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration|
C:\Users\Olek\C++_1\main.cpp|38|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration|
这是程序的代码
#include <iostream>
template <typename T>
T maxn(T*,int);
template <> char* maxn<char*>(char*);
const char* arr[5]={
"Witam Panstwa!",
"Jak tam dzionek?",
"Bo u mnie dobrze",
"Bardzo lubie jesc slodkie desery",
"Chociaz nie powinienem",
};
using namespace std;
int main()
{
int x[5]={1,4,6,2,-6};
double Y[4]={0.1,38.23,0.0,24.8};
cout<<maxn(x,5)<<endl;
cout<<maxn(Y,4)<<endl;
return 0;
}
template <typename T>
T maxn(T* x,int n){
T max=x[0];
for(int i=0;i<n;i++){
if(x[i]>max)
max=x[i];
}
return max;
}
template <>
char* maxn<char*>(char* ch){
return ch;
}
我还没有实现这个功能,但是已经声明了。另外我想使用函数重载会更容易,但它是书中的一个分配。
提前感谢您的回答。
您的模板 return 是类型 T
并采用类型 T*
但您的专业化 return 与它采用的类型相同,所以它不是比赛。
如果你专攻 T=char*
,那么它需要一个 T* (char**) 和 return 一个 char*
或者专攻 char
template <typename T>
T maxn(T*,int);
template <> char maxn<char>(char*, int);
template <> char* maxn<char*>(char**, int);
int main() {
char * str;
maxn(str, 5);
maxn(&str, 6);
}
我对 C++ 程序的显式特化有疑问
我想对 char* 类型进行专门化,returns 一个指向最长 char 数组的地址,但我不断收到错误:
C:\Users\Olek\C++_1\main.cpp|6|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration|
C:\Users\Olek\C++_1\main.cpp|38|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration|
这是程序的代码
#include <iostream>
template <typename T>
T maxn(T*,int);
template <> char* maxn<char*>(char*);
const char* arr[5]={
"Witam Panstwa!",
"Jak tam dzionek?",
"Bo u mnie dobrze",
"Bardzo lubie jesc slodkie desery",
"Chociaz nie powinienem",
};
using namespace std;
int main()
{
int x[5]={1,4,6,2,-6};
double Y[4]={0.1,38.23,0.0,24.8};
cout<<maxn(x,5)<<endl;
cout<<maxn(Y,4)<<endl;
return 0;
}
template <typename T>
T maxn(T* x,int n){
T max=x[0];
for(int i=0;i<n;i++){
if(x[i]>max)
max=x[i];
}
return max;
}
template <>
char* maxn<char*>(char* ch){
return ch;
}
我还没有实现这个功能,但是已经声明了。另外我想使用函数重载会更容易,但它是书中的一个分配。
提前感谢您的回答。
您的模板 return 是类型 T
并采用类型 T*
但您的专业化 return 与它采用的类型相同,所以它不是比赛。
如果你专攻 T=char*
,那么它需要一个 T* (char**) 和 return 一个 char*
或者专攻 char
template <typename T>
T maxn(T*,int);
template <> char maxn<char>(char*, int);
template <> char* maxn<char*>(char**, int);
int main() {
char * str;
maxn(str, 5);
maxn(&str, 6);
}