作者:卡吉米国际早教_763 | 来源:互联网 | 2024-10-27 20:17
做的是c++ primer plus上的第八章 第6题要求做2个函数模板,分别对int double数组,还有一个模板具体化用char*[]int 和double的是没问题的, 具体化的那个,我弄了好
做的是c++ primer plus上的第八章 第6题
要求做2个函数模板,分别对int double数组,还有一个模板具体化用char*[]
int 和double的是没问题的, 具体化的那个,我弄了好久.不知道为什么不能编译.
然后我用普通函数写了一遍,发现能正常运行.然后又搞了半天还是不行就上网找答案,发现我跟答案
写的格式基本一样. 就是不能编译
报错信息:main.cpp:43:23: 错误:‘const char maxn(const char, int)’的模板标识符‘maxn []>’不匹配任何模板声明 template<>const char maxn[]>(const char* x[], int n)
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include
#include
using namespace std;
templateT maxn(T x, int n);
template<>const char* maxn(const char* x[], int n);
/*
* 模板函数针对不同类型数组 输出数组中最大的那个值
*/
int main(int argc, char** argv) {
int ix[6] = {34, 12, 343, 1, 43, 31};
double dx[4] = {1.34, 1231.2, 34.3, 44.23};
const char* sx[5] = {"abcde", "fedcba", "abcdefg", "12345", "qwert"};
cout <<"ix[6] max: " <<*maxn(ix, sizeof ix / sizeof ix[0]) < cout <<"dx[4] max: " <<*maxn(dx, sizeof dx / sizeof dx[0]) < cout <<"sx[5] max_address: " <<(int*) maxn(sx, 5) < cout <<"Press Enter To Exit..." < cin.get();
return 0;
}
//这个是我自己写的普通函数,能运行
//const char* maxn(const char* x[5],int n) {
// const char* max_len = x[0];
// for (int i = 0; i // max_len = strlen(max_len) >= strlen(x[i + 1]) ? max_len : x[i + 1];
// }
// return max_len;
//}
template<>const char* maxn(const char* x[], int n)
{
const char* max_len = x[0];
for (int i = 0; i max_len = strlen(max_len) >= strlen(x[i + 1]) ? max_len : x[i + 1];
}
return max_len;
}
template
T maxn(T x, int n) {
for (int i = 0; i x[i + 1] = x[i] > x[i + 1] ? x[i] : x[i + 1];
}
return x + n - 1;
} |