1

データメンバーとしてとを持つPointクラスがあります。過負荷になったXYName

T operator-(const Point<T> &);

これは、2 点間の距離を計算し、値を返します。

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 に答える