Tôi tự hỏi tại sao mã ví dụ giả mạo sau hoạt động hoàn toàn tốt trong Visual Studio 2005, nhưng tạo ra một lỗi trong GCC ("không có chức năng phù hợp để gọi" khi gọi Interpolate() như hình dưới đây).GCC 4.0: "không có chức năng phù hợp để gọi" trong chức năng mẫu
Ngoài ra, làm cách nào để giải quyết vấn đề này? Dường như thông báo lỗi chỉ là một thông báo chung vì GCC không có thông điệp cụ thể hơn cho lý do thực sự của vấn đề và nó phải xuất ra một thứ gì đó. Tôi là một chút mất mát về làm thế nào để tiến hành porting lớp này mà không có một số cách giải quyết thực sự xấu xí.
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&)'
Nhờ sự giúp đỡ của bạn,
Adrian
Câu trả lời hay. Cảm ơn sự giúp đỡ của bạn! :-) –