error C2955: 使用类 模板 需要 模板 参数列表c++模板问题。。求高手指点
main:#include<iostream>#include"Point.h"usingnamespacestd;voidmain(){doublex,y;cout<<...
main:
#include<iostream>
#include"Point.h"
using namespace std;
void main()
{
double x, y;
cout << "please input a point: ";
cin >> x >> y;
Point<double>p1(x,y);
cout << "Point p1: ";
p1.print();
cout << endl;
Point<double>p2(x * 2, y * 2);
cout << "Point p2: ";
p2.print();
Point:max(p1,p2);
cout<<endl;
getchar();
}
Point。h:
#include<iostream>
#include<cstdlib>
using namespace std;
template<class T>
class Point
{
public:
Point(T x = 0, T y = 0); // 默认构造函数,默认值为左上角坐标(0, 0)
void setX(T x);
T getX();
void setY(T y);
T getY();
void print();
// void moveRight(T offset);
// void moveDown(T offset);
T& max(Point &, Point &);
private:
T x;
T y;
};
Point.cpp:
#include<iostream>
#include"Point.h"
using namespace std;
template<class T>
Point<T>::Point(T x, T y)// 默认构造函数,默认值为左上角坐标(0, 0)
{
this->x = x;
this->y = y;
}
template<class T>
void Point<T>::setX(T x)
{
this->x = x;
}
template<class T>
T Point<T>::getX()
{
return x;
}
template<class T>
void Point<T>::setY(T y)
{
this->y = y;
}
template<class T>
T Point<T>::getY()
{
return y;
}
template<class T>
void Point<T>::print()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
template<class T>
T &Point<T>::max(Point &a, Point &b)
{
if(b.x < a.x)
{
a.print();
return a;
}
else
{
b.print();
return b;
}
}
1>c:\users\administrator\desktop\10\10\main.cpp(16): error C2955: “Point”: 使用类 模板 需要 模板 参数列表
1> c:\users\administrator\desktop\10\10\point.h(7) : 参见“Point”的声明 展开
#include<iostream>
#include"Point.h"
using namespace std;
void main()
{
double x, y;
cout << "please input a point: ";
cin >> x >> y;
Point<double>p1(x,y);
cout << "Point p1: ";
p1.print();
cout << endl;
Point<double>p2(x * 2, y * 2);
cout << "Point p2: ";
p2.print();
Point:max(p1,p2);
cout<<endl;
getchar();
}
Point。h:
#include<iostream>
#include<cstdlib>
using namespace std;
template<class T>
class Point
{
public:
Point(T x = 0, T y = 0); // 默认构造函数,默认值为左上角坐标(0, 0)
void setX(T x);
T getX();
void setY(T y);
T getY();
void print();
// void moveRight(T offset);
// void moveDown(T offset);
T& max(Point &, Point &);
private:
T x;
T y;
};
Point.cpp:
#include<iostream>
#include"Point.h"
using namespace std;
template<class T>
Point<T>::Point(T x, T y)// 默认构造函数,默认值为左上角坐标(0, 0)
{
this->x = x;
this->y = y;
}
template<class T>
void Point<T>::setX(T x)
{
this->x = x;
}
template<class T>
T Point<T>::getX()
{
return x;
}
template<class T>
void Point<T>::setY(T y)
{
this->y = y;
}
template<class T>
T Point<T>::getY()
{
return y;
}
template<class T>
void Point<T>::print()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
template<class T>
T &Point<T>::max(Point &a, Point &b)
{
if(b.x < a.x)
{
a.print();
return a;
}
else
{
b.print();
return b;
}
}
1>c:\users\administrator\desktop\10\10\main.cpp(16): error C2955: “Point”: 使用类 模板 需要 模板 参数列表
1> c:\users\administrator\desktop\10\10\point.h(7) : 参见“Point”的声明 展开
2个回答
展开全部
你的max函数不是静态函数,不能这么调用。建议你将max声明一个友元函数。
template<class T>
class Point
{
public:
Point(T x = 0, T y = 0); // 默认构造函数,默认值为左上角坐标(0, 0)
void setX(T x);
T getX();
void setY(T y);
T getY();
void print();
// void moveRight(T offset);
// void moveDown(T offset);
friend T& max(Point &, Point &); // 更改
private:
T x;
T y;
};
template<class T>
T &max(Point &a, Point &b)
{
if(b.x < a.x)
{
a.print();
return a;
}
else
{
b.print();
return b;
}
}
template<class T>
class Point
{
public:
Point(T x = 0, T y = 0); // 默认构造函数,默认值为左上角坐标(0, 0)
void setX(T x);
T getX();
void setY(T y);
T getY();
void print();
// void moveRight(T offset);
// void moveDown(T offset);
friend T& max(Point &, Point &); // 更改
private:
T x;
T y;
};
template<class T>
T &max(Point &a, Point &b)
{
if(b.x < a.x)
{
a.print();
return a;
}
else
{
b.print();
return b;
}
}
更多追问追答
追问
大侠,我将那个函数声明为友员,可是还是那个错误。我也觉得自己的函数写的有问题。题目要求调用模板比较两个类大小。请问怎样写才好呢?
追答
首先,如果用模板比较两个类的大小,你传进去的参数应该是模板类型吧。
模板公司不让用,所以我在这方面学的也不多。你把代码发到我邮箱里,我帮你看一下吧
adiemusmx@yahoo.com.cn
展开全部
类模板中类的成员函数的声明和定义要在同一个文件中
将他们放到同一个头文件中试试
将他们放到同一个头文件中试试
更多追问追答
追问
我把max函数放到声明里了,还是一样的错误。。。
就是主函数:Point:max(p1,p2);错了
求亲爱的高手指点啊...这是我这学期最后一个实验了。。。原来这么折磨人的
解决了我绝对加分哦。。。这个实验应该不难吧
追答
这个写法是不正确的,max是Point的成员函数,只能通过对象来调用,这个函数可以不用模板,因为它只负责比较两个Point类的函数成员变量大小,返回值为Point类型即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询