1

我有Point一个具有X,YName作为数据成员的类。我超载了

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

任何帮助表示赞赏...

4

3 回答 3

2

您不能编译非专业模板。您必须将定义代码放在标题中。

于 2012-07-24T10:30:21.803 回答
0

您需要将 Point 模板类放在 .hpp 文件中,并在使用 Point 时包含该文件。

于 2012-07-24T10:33:54.033 回答
0

您必须在每个使用模板的文件中包含模板,否则编译器无法为您的特定类型生成代码。

运算符之间也有优先级,重载它们时不会改变。您的代码将被视为

(cout << P2) - P1; 

试试这个

cout << (P2 - P1); 
于 2012-07-24T11:09:53.477 回答