鱼C论坛

 找回密码
 立即注册
查看: 1574|回复: 6

模板具体化怎么定义,看不出哪里出错了

[复制链接]
发表于 2016-8-3 20:30:08 | 显示全部楼层 |阅读模式
20鱼币
sumarray具体化有问题求助

#include <iostream>
#include <cstdlib>
using namespace std;
struct debts
{
       char name[50];
       double amount;
};
template<>double sumarray<debts>(debts ar[],int n);
template<class T>
T sumarray(T ar[],int n);
int main()
{
    int things[6] = {13,31,103,301,310,130};
    debts ded[3] = 
    {
           {"Ima Wlofe",2400.0},
           {"Ura Foxe",1300.0},
           {"Iby Stout",1800.0}
    };
    double *pd[3];
    for(int i = 0;i<3;i++)
    {
            pd[i] = &ded[i].amount;
    }
    cout<<"things zong he:"<<sumarray(things,6)<<endl;
    cout<<"ded zong he:"<<sumarray(ded,3)<<endl;
    system("pause");
    return 0;
}
template<class T>
T sumarray(T ar[],int n)
{
      T re = ar[0];
      for(int i = 1;i<n;i++)
      re+=ar[i];
      return re;
}
template <> double sumarray(debts ar[],int n)
{
       double re = ar[0].amount;
       for(int i = 1;i<n;i++)
       re = re+ar[i].amount;
       return re;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-3 20:30:09 | 显示全部楼层
本帖最后由 patton88 于 2016-8-3 21:34 编辑
// 前置声明方式也行

// VS2013 Win32 Console UNICODE Success Run

#include <iostream>
#include <cstdlib>
using namespace std;

struct debts
{
        char name[50];
        double amount;
};

template<class T>
double sumarray(T ar[], int n);

template<>
double sumarray<debts>(debts ar[], int n);

int main()
{
        int things[6] = { 13, 31, 103, 301, 310, 130 };
        debts ded[3] =
        {
                { "Ima Wlofe", 2400.0 },
                { "Ura Foxe", 1300.0 },
                { "Iby Stout", 1800.0 }
        };
        double *pd[3];
        for (int i = 0; i < 3; i++)
        {
                pd[i] = &ded[i].amount;
        }
        cout << "things zong he:" << sumarray(things, 6) << endl;
        cout << "ded zong he:" << sumarray(ded, 3) << endl;
        system("pause");
        return 0;
}

template<class T>
double sumarray(T ar[], int n)
{
        double re = ar[0];
        for (int i = 1; i < n; i++)
                re += ar[i];
        return re;
}

template<>
double sumarray(debts ar[], int n)
{
        double re = ar[0].amount;
        for (int i = 1; i < n; i++)
                re = re + ar[i].amount;
        return re;
}


/* Result of Run:

things zong he:888
ded zong he:5500
Press any key to continue . . .

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

使用道具 举报

发表于 2016-8-3 21:14:31 | 显示全部楼层
本帖最后由 patton88 于 2016-8-3 21:34 编辑
// VS2013 Win32 Console UNICODE Success Run

#include <iostream>
#include <cstdlib>
using namespace std;

struct debts
{
        char name[50];
        double amount;
};

template<class T>
double sumarray(T ar[], int n)
{
        double re = ar[0];
        for (int i = 1; i < n; i++)
                re += ar[i];
        return re;
}

template<>
double sumarray(debts ar[], int n)
{
        double re = ar[0].amount;
        for (int i = 1; i < n; i++)
                re = re + ar[i].amount;
        return re;
}

int main()
{
        int things[6] = { 13, 31, 103, 301, 310, 130 };

        debts ded[3] =
        {
                { "Ima Wlofe", 2400.0 },
                { "Ura Foxe", 1300.0 },
                { "Iby Stout", 1800.0 }
        };

        double *pd[3];
        
        for (int i = 0; i < 3; i++)
        {
                pd[i] = &ded[i].amount;
        }
        
        cout << "things zong he:" << sumarray(things, 6) << endl;
        cout << "ded zong he:" << sumarray(ded, 3) << endl;

        system("pause");
        return 0;
}

/* Result of Run:

things zong he:888
ded zong he:5500
Press any key to continue . . .

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

使用道具 举报

 楼主| 发表于 2016-8-6 17:00:14 | 显示全部楼层

前几天没看,试了一下编译过了,就给你,刚刚看了,这个程序的问题是函数模板的返回类型不能用T代替吧?谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-6 19:45:04 | 显示全部楼层
花开自有丶花落 发表于 2016-8-6 17:00
前几天没看,试了一下编译过了,就给你,刚刚看了,这个程序的问题是函数模板的返回类型不能用T代替吧? ...

多交流,共同学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-6 20:08:24 | 显示全部楼层
patton88 发表于 2016-8-6 19:45
多交流,共同学习

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

使用道具 举报

发表于 2016-8-7 10:06:15 | 显示全部楼层
看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 06:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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