C++模板类实例化,编译器报错

//Templatespecialization#include<iostream>template<classT>classpair{Tvalue1,value2;pu... // Template specialization
#include <iostream>

template <class T> class pair {
T value1, value2;
public:
pair(T first, T second){
value1 = first;
value2 = second;
}
T module() { return 0; }
};
template <>
class pair <int> {
int value1, value2;
public:
pair(int first, int second){
value1 = first;
value2 = second;
}
int module();
};

template <>
int pair<int>::module() {//报错:module()不是可显式专用化的实体
return value1%value2;
}

int main() {
pair <int> myints(100, 75);
pair <float> myfloats(100.0, 75.0);
std::cout << myints.module() << '\n';
std::cout << myfloats.module() << '\n';
return 0;
}
展开
 我来答
匿名用户
推荐于2016-12-02
展开全部
第一种方法意味着在使用模板的转换文件中不但要包含模板声明文件,还要包含模板定义文件。在上例中,就是第一个示例,在array.h中用行内函数定义了所有的成员函数。或者在main.cpp文件中也包含进array.cpp文件。这样编译器就能看到模板的声明和定义,并由此生成array<int, 50>实例。这样做的缺点是编译文件会变得很大,显然要降低编译和链接速度。
第二种方法,通过显式的模板实例化得到类型。最好将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:
// templateinstantiations.cpp
#include "array.cpp"
template class array <int, 50>; // 显式实例化
追问
这个是书上的实例但是编译器报错(VS2012)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式