鱼C论坛

 找回密码
 立即注册
查看: 2115|回复: 7

c++ 模板具体化问题

[复制链接]
发表于 2014-5-10 12:47:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
{
        using namespace std;
        char str[3][9] = {
        "1234567",
        "12345",
        "123456",
        };
        int a[5] = {6,5,4,9,2};
        double b[5] = {9.3,15.2,3,4,6};
        cout << max(a,5) <<'\n'<< max(b,5);
        cout << max(str[0],3);
        return 0;
}
template<typename T>
T max(T s[],int n)
{
        int i = 1;
        T num;
        num = s[0];
        for(;i <= n-1;i++)
        {
                if(s[i] > num)
                {
                        num = s[i - 1];
                }
        }
        return num;
}

template<> char * max(char s[][9],int n)
{
        int i = 1,num = 0;
        for(;i <= n;i++)
        {
                if(strlen(s[i]) > strlen(s[num]))
                {
                        num = i;
                }
        }
        return s[num];
}
不能通过

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-10 16:10:02 | 显示全部楼层
不知道这样该能不能满足你的要求:
template<typename T>
T *max(T s[][9],int n)
{
        int i = 1,num = 0;
        for(;i <= n;i++)
        {
                if(strlen(s[i]) > strlen(s[num]))
                {
                        num = i;
                }
        }
        return s[num];
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-10 16:58:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-10 17:33:43 | 显示全部楼层
aces 发表于 2014-5-10 16:58
我只想知道我是怎么错的
template<> char * max(char s[][9],int n)
{
        int i = 1,num = 0;
        for(;i <= n;i++)
        {
                if(strlen(s[i]) > strlen(s[num]))
                {
                        num = i;
                }
        }
        return s[num];
}
这个函数本来是一个模板函数但是没有实现模板的功能(具体有类型)所以没有意义,还有你在调用函数前没有声明,把两个模板函数放在 main 之前就没错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 19:30:28 | 显示全部楼层
sidfate 发表于 2014-5-10 17:33
这个函数本来是一个模板函数但是没有实现模板的功能(具体有类型)所以没有意义,还有你在调用函数前没有 ...

好吧我代码复制的时候少了点
前面已经声明了函数和头文件
我用的vs2010
可是还是通不过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-11 22:18:11 | 显示全部楼层
aces 发表于 2014-5-11 19:30
好吧我代码复制的时候少了点
前面已经声明了函数和头文件
我用的vs2010

来个完整代码,还有代码的作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-12 12:12:06 | 显示全部楼层
知道什么是具体化吗?
template<typename T>
T max(T s[],int n)
把上面的T换成char*后
应该为
template<>
char* max( char* s[], int n );
而不是
template<> char * max(char s[][9],int n);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-12 19:10:58 | 显示全部楼层
仰望天上的光 发表于 2014-5-12 12:12
知道什么是具体化吗?
template
T max(T s[],int n)

了解了   tk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表