qq_38283039
Halorouge
采纳率100%
2019-10-07 18:14

C++PrimerPlus第六版第八章第6题求助

已采纳

题目意思是:
建立一个通用的函数模板,由一个T类型元素数组,和一个该数组元素个数的整数来作为两个参数,然后返回这个数组中最大的元素。
在使用时,用一个6个元素的int数组和4个元素的double数组来调用该模板。代码执行到这里都没问题。
但是题目还要求定义一个具体化,将char指针数组和这个指针数组中的指针数量作为参数,返回该数组中指向的字符串中最长的那一个的指针(对应字符串的地址)。使用5个字符串指针组成的数组进行测试。
我的运行结果就是,无论怎么改字符串,最后返回的总是数组中最后一个字符串的地址。之后我在具体化函数定义里加了一些标记,然后执行发现这些标记根本不显示,就是说函数重载模板都是载入的通用模板而不是具体化模板,但我不知道怎么解决这个问题。
编译器是Dev-C++ 5.11
代码如下:

#include<iostream>
using namespace std;
#include<cstring>
template<typename T>
T maxn(const T * t,int size);
template <char *> char* maxn(const char* t[], int size);
int main(void){
    int tt[6]={5,48,92,107,25,66};
    double td[4]={44.5,97.8475,54.6,81.1};
    const char  *tp[] = {"Good Game","Happy life","Lt.Jonason","little one","Why so serious?"};
    cout << "tt.max = " << maxn(tt,6) << endl;
    cout << "td.max = " << maxn(td,4) << endl;
    const char *maxc = maxn(tp,5);
    cout << "tp.max = " << maxc << endl;
    return 0;
}
template<typename T>
T maxn(const T * t,int size){
    T max = t[0];
    for(int i = 1;i < size; i++)
        if(*(t+i)>max)
            max = *(t + i);
    return max;
}
template <char *> char* maxn(const char* t[], int size){
    char* max = t[0];
    for(int i = 1 ; i < size ;i++){
        if(strlen(max) < strlen(t[i])){
            cout << endl << max << " " << t[i] << endl;
            strcpy(max,t[i]);           
        }
    }
    return max;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答