Halorouge 2019-10-07 18:14 采纳率: 100%
浏览 319
已采纳

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条回答 默认 最新

  • dabocaiqq 2019-10-08 09:38
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器