【发布时间】:2009-02-03 15:06:05
【问题描述】:
我想知道为什么以下人为设计的示例代码在 Visual Studio 2005 中运行良好,但在 GCC 中生成错误(调用 Interpolate() 时“没有要调用的匹配函数”,如下所示)。
另外,我该如何解决这个问题?似乎错误消息只是一条通用消息,因为 GCC 没有针对问题的实际原因提供更具体的消息,它必须输出一些东西。我对如何在没有一些非常丑陋的解决方法的情况下继续移植这个类有点不知所措。
namespace Geo
{
template <class T>
class TMyPointTemplate
{
T X,Y;
public:
inline TMyPointTemplate(): X(0), Y(0) {}
inline TMyPointTemplate(T _X,T _Y): X(_X), Y(_Y) {}
inline T GetX ()const { return X; }
inline T GetY ()const { return Y; }
//...
template<T> TMyPointTemplate<T> Interpolate(const TMyPointTemplate<T> &OtherPoint)const
{
return TMyPointTemplate((X+OtherPoint.GetX())/2,(Y+OtherPoint.GetY())/2);
}
};
typedef TMyPointTemplate<int> IntegerPoint;
}
Geo::IntegerPoint Point1(0,0);
Geo::IntegerPoint Point2(10,10);
Geo::IntegerPoint Point3=Point1.Interpolate(Point2); //GCC PRODUCES ERROR: no matching function for call to 'Geo::TMyPointTemplate<int>::Interpolate(Geo::IntegerPoint&)'
感谢您的帮助,
阿德里安
【问题讨论】: