cnVector.cppで実装が記述されているcnVector.hというヘッダーファイルがあります。これらの2つのファイルは同じディレクトリにあります。
cNormalCBP/
+ src/
+ cNormal/
+ cnUtils/
- cnVector.h
- cnVector.cpp
- main.cpp
ヘッダーには、単純なクラス定義が含まれています。
class cnVector {
public:
cnVector(double, double, double);
inline cnVector cross(const cnVector&) const;
};
.cppファイルの実装は次のとおりです。
#include "cnVector.h"
/* constructor */ cnVector::cnVector(double x, double y, double z)
: x(x), y(y), z(z) {
}
cnVector cnVector::cross (const cnVector& vOther) const {
return cnVector(
y * vOther.z + z * vOther.y,
z * vOther.x + x * vOther.z,
x * vOther.y + y * vOther.x );
}
ここで、main.cppの次のコードは、 cnVector :: cross(cnVector const&)const;への未定義の参照が原因で、3行目で壊れています。
コンストラクターの実装は認識されますが、メソッドは認識されないことに注意してください。cnVector::cross
int main() {
cnVector v1(1, 0, 0), v2(0, 1, 0);
cnVector v3 = v1.cross(v2);
}
また、エラーメッセージの警告が表示されます。インライン関数'cnVector cnVector :: cross(const cnVector&)const'が使用されていますが、定義されていません。
実装をmain.cppにコピーすると機能します。
cnVectorインスタンスを作成できるのに、他のメソッドの実装が認識されない理由を説明していただけますか?