私は、3つの浮動小数点、x y z、いくつかの関数とオーバーロードされた演算子を保持するPointクラスを作成しています。私は以下の形式で演算子をコード化しました:オペレータのオーバーロードとVS2010でのLNK2019のエラー
inline Point Point::operator+ (Point point)
{
return Point(x + point.x, y + point.y, z + point.z);
}
inline void Point::operator+= (Point point)
{
x += point.x;
y += point.y;
z += point.z;
}
これは正しい演算子ですか?私はそれを試して、それが動作しますが、私はそういう別のフォームを見た:
inline Point& Point::operator+ (Point& point)
{
return Point(x + point.x, y + point.y, z + point.z);
}
inline Point& Point::operator+= (Point& point)
{
x += point.x;
y += point.y;
z += point.z;
return *this;
}
2つのフォームの違いは何ですか?
また、私はPoint.cppファイル内の演算子を使用できますが、Main.cppで使用しようとすると、未解決の外部シンボルに対してlnk2019エラーが発生します。奇妙なことに、私の関数は定義ファイルの外で動作します。これらの演算子を定義したファイルの外で動作させるには、何が欠けていますか?
リンクエラーを回避するには、インラインで宣言しないでください。私は実際にそれが問題の原因であるとは思わないでしょうが。 –