读书人

菜鸟小弟我这么写类成员函数的模板实现

发布时间: 2013-12-02 12:00:40 作者: rapoo

初学者求助:我这么写类成员函数的模板实现,错在哪里?
我这么写类成员函数的模板实现,错在哪里?
class A
{
public:
template <typename T>
void Max(T t1,int a);
}

template <typename T>
void A::Max(T t1,int a)
{
//处理部分省略
}

void main()
{
int i = 0;
float f = 2.456;

A ca;
ca.Max(i,2);
ca.Max(f,3);


}
[解决办法]
template <typename T>
class A
{
public:
void Max(T t1,int a);
}
或者
template <typename T>
T Max(T t1,int a);



[解决办法]
VC6 不支持这种模板
这只是,比较旧的编译器,不支持而已。
换个版本就好
比如
VS2008(VC9),VS2010(VC10),VS2012(VC11?),VS2013(VC12?)
后两种,需要win7,win8,
xp 跑不起来,所以不太清楚,想来应该支持的。
版本号对不对,不是很清楚。

[解决办法]
(1)定义函数模板(function template)

// implement strcmp-like generic compare function
template <typename T>
int compare(const T &v1, const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}

(2)定义类模板(class template)
template <typename Type> 
class Queue
{
public:
Queue();
Type & front();
const Type & front() const;
void push(const Type &);
// …
};

[解决办法]
模板成员函数没问题。


[解决办法]
class A 的定义}后面缺一个分号。
[解决办法]
引用:
我这么写类成员函数的模板实现,错在哪里?
class A
{
public:
template <typename T>
void Max(T t1,int a);
}

template <typename T>
void A::Max(T t1,int a)
{
//处理部分省略
}

void main()
{
int i = 0;
float f = 2.456;

A ca;
ca.Max(i,2);
ca.Max(f,3);


}

我把楼主的代码编译了下,用得是g++ ,只是类的定义后缺少;,还有main函数应该有返回值int,return 0;

class A
{

};

int main()
{
return 0;

}

读书人网 >C++

热点推荐