我的Point
类有X
,Y
和Name
作为数据成员。我超载了
T operator-(const Point<T> &);
计算两点之间的距离并返回值
template < typename T>
T Point<T>::operator-(const Point<T> &rhs)
{
cout << "\nThe distance between " << getName() << " and "
<< rhs.getName() << " = ";
return sqrt(pow(rhs.getX() - getX(), 2) + pow(rhs.getY() - getY(), 2));;
}
main
功能
int main () {
Point<double> P1(3.0, 4.1, "Point 1");
Point<double> P2(6.4, 2.9, "Point 2");
cout << P2 - P1;
return EXIT_SUCCESS;
}
但问题是该程序无法编译,我收到此错误:
Undefined symbols:
"Point<double>::operator-(Point<double>&)", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
感谢任何帮助...
答案 0 :(得分:2)
您无法编译非专业模板。您必须将定义代码放在标题中。
答案 1 :(得分:0)
您需要将Point模板类放在.hpp文件中,并在使用Point时包含它。
答案 2 :(得分:0)
您必须在每个使用它们的文件中包含模板,否则编译器无法为您的特定类型生成代码。
运算符之间也有一个优先级,在重载时不会更改。您的代码将被视为
(cout << P2) - P1;
试试这个
cout << (P2 - P1);