1

で次の関数が定義されていchess_location.hます。

inline chess_location operator+(chess_location lhs, const chess_coord& rhs);

そして、でchess_location.cpp

#include "chess_location.h"

chess_location operator+(chess_location lhs, const chess_coord& rhs) { 
  //function definition
}

そして、次のように、 my main()inでこの演算子を使用しています。main.cpp

#include "chess_location.h"
int main() {
  chess_location_B = chess_location_A + chess_coord;
}

しかし、演算子が見つからないというリンカ エラーが表示されます。

error LNK2019: unresolved external symbol "class chess_location __cdecl operator+(class chess_location,class chess_coord const &)" (??H@YA?AVchess_location@@V0@ABVchess_coord@@@Z) referenced in function _main

リンカーが演算子の宣言を定義に接続していないように思えますが、その理由はわかりません。私は自分の体に何か問題があるのではないかと疑っていconstます。ただし、演​​算子の定義を に移動するmain.cppと、すべてがコンパイルされ、正常に動作します。

このエラーの原因はどこにありますか?

4

1 に答える 1

7

インラインにする必要がある場合operator +は、定義をヘッダー ファイルに入れる必要があります。インラインにするつもりがない場合は、cpp ファイルに入れ、宣言から「インライン」を削除します。

于 2013-01-29T12:27:53.630 に答える