模版声明和定义与顺序有关吗?

bond_shoo 2008-04-09 11:24:09
当我在C++ DEV上编译C++ primer Plus v5 实例8.13的时候发现模版声明和定义的顺序有关。下面是可以编译通过的代码。但是当我把template <class Any> void Swap(Any &a, Any &b);声明放到template <> void Swap<job> (job &j1, job &j2);后面之后,编译就不能通过了。报错是:
template <> void Swap<job> (job &j1, job &j2) -- expected init-declarator before '<' token
template <> void Swap<job> (job &j1, job &j2) -- expected ';' before '<' token
template <> void Swap<job>(job &j1, job &j2)
{ -- specialization of void Swap(Any &, Any &)[with Any=job] after instantiation

这是为何?难道现模版声明和定义的顺序有关吗?

#include<iostream>
template <class Any>
void Swap(Any &a, Any &b);
struct job
{
char name[40];
double salary;
int floor;
};
template <> void Swap<job> (job &j1, job &j2);
void Show(job &j);

int main()
{
.......
}

template <class Any>
void Swap(Any &a, Any &b)
{
Any temp;
temp = a;
a = b;
b = temp;
}
template <> void Swap<job>(job &j1, job &j2) // specialization
{
double t1;
int t2;
t1 = j1.salary;
j1.salary = j2.salary;
j2.salary = t1;
t2 = j1.floor;
j1.floor = j2.floor;
j2.floor = t2;
}

void Show(job &j)
{
using namespace std;
cout << j.name << ": $" << j.salary << " on floor " << j.floor << endl;
}
...全文
29 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttkk_2007 2008-04-09
  • 打赏
  • 举报
回复
你都没有模板,哪来特化
Supper_Jerry 2008-04-09
  • 打赏
  • 举报
回复
本来就是的。
实践出真知。陶大妈教的 呵呵
taodm 2008-04-09
  • 打赏
  • 举报
回复
如果真的书上没讲这个问题的话,就建议你换书。
特化必须在主模板声明之后,这是一个最基本的话题。
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-09 11:24
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下