У меня есть файл заголовка с именем cnVector.h , реализация которого записана в cnVector.cpp .Эти два файла находятся в одном каталоге.
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 разрывается на строку 3 из-за неопределенной ссылки на cnVector :: cross(cnVector const &) const;
Обратите внимание, как распознается реализация-конструктор, но не метод 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 , но реализация других методов не распознается?