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 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退