我目前正在学习 C++,所以我对该主题没有太多了解。我正在使用 C++ 入门加书,这就是问题所在:
编写一个模板函数 maxn(),它的参数是一个类型为 T 的项的数组和一个表示数组中元素数量的整数,并返回数组中的最大项。在使用函数模板的程序中对其进行测试,该函数模板包含一个包含六个 int 值的数组和一个包含四个 double 值的数组。该程序还应该包括一个特殊化,它将一个指向字符的指针数组作为参数,将指针的数量作为第二个参数,并返回最长字符串的地址。如果多个字符串的长度最长,函数应该返回第一个最长的字符串的地址。使用由五个字符串指针组成的数组测试特化。
这是我的代码:
#include <iostream>
#include <cstring>
using namespace std;
template <class T> T maxn(T arr[] , int n);
template <> char * maxn<char (*)[10]> (char (*arr)[10] , int n);
int main()
{
double array[5] = { 1.2 , 4.12 ,7.32 ,2.1 ,3.5};
cout << endl << maxn(array , 5) << endl << endl;
char strings[5][6] = { "asta" , " m" , "ta" , "taree" , "e"};
cout << maxn(strings , 5) << endl;
return 0;
}
template <class T> T maxn(T arr[] , int n)
{
T max = 0;
for (int i = 0 ; i < n ; ++i)
{
if (arr[i] > max)
max = arr[i];
}
return max;
}
template <> char * maxn<char (*)[10]> (char (*arr)[10] , int n)
{
int length = 0;
int mem = 0;
for ( int i = 0 ; i < n ; ++i)
{
if (strlen(arr[i]) > length)
{
length = strlen(arr[i]);
mem = i;
}
}
return arr[mem];
}
我正在尝试传递一个字符串数组。我收到以下错误:
g++ -Wall -o "untitled5" "untitled5.cpp" (in directory: /home/eukristian)
untitled5.cpp:6: error: template-id ‘maxn<char (*)[10]>’ for ‘char* maxn(char (*)[10], int)’ does not match any template declaration
untitled5.cpp: In function ‘int main()’:
untitled5.cpp:14: error: no matching function for call to ‘maxn(char [5][6], int)’
untitled5.cpp: At global scope:
untitled5.cpp:31: error: template-id ‘maxn<char (*)[10]>’ for ‘char* maxn(char (*)[10], int)’ does not match any template declaration
Compilation failed.
我很确定我犯了一些新手错误,我无法检测到它。谢谢 。