Добрый день.
Есть проект (библиотека). В качестве IDE - QtCreator.
Есть следующие файлы:
point2d.h#ifndef POINT2D_H
#define POINT2D_H
#include "geometry_global.h"
//================================================================================================================================
// Точка в двумерном пространстве.
//================================================================================================================================
class GEOMETRY_EXPORT Point2D
{
public:
Point2D();
Point2D(double xc, double yc);
double x() const;
double y() const;
void setX(double xc);
void setY(double yc);
friend inline bool operator==(const Point2D &p1, const Point2D &p2);
friend inline bool operator!=(const Point2D &p1, const Point2D &p2);
friend inline const Point2D operator-(const Point2D &point);
private:
double m_x;
double m_y;
};
#endif // POINT2D_H
point2d.cpp#include "point2d.h"
//================================================================================================================================
//================================================================================================================================
inline Point2D::Point2D() : m_x(0.0), m_y(0.0){}
inline Point2D::Point2D(double xc, double yc) : m_x(xc), m_y(yc){}
//================================================================================================================================
//================================================================================================================================
inline double Point2D::x() const {return m_x;}
inline double Point2D::y() const {return m_y;}
inline void Point2D::setX(double xc){m_x = xc;}
inline void Point2D::setY(double yc){m_y = yc;}
//================================================================================================================================
//================================================================================================================================
inline bool operator==(const Point2D &p1, const Point2D &p2){return p1.m_x == p2.m_x && p1.m_y == p2.m_y;}
inline bool operator!=(const Point2D &p1, const Point2D &p2){return p1.m_x != p2.m_x || p1.m_y != p2.m_y;}
inline const Point2D operator-(const Point2D &point){return Point2D(-point.m_x, -point.m_y);}
geometry.h#ifndef GEOMETRY_H
#define GEOMETRY_H
#include "point2d.h"
#include "geometry_global.h"
//================================================================================================================================
// Расстояние между точками A и B.
//================================================================================================================================
double GEOMETRY_EXPORT distance(const Point2D &A, const Point2D &B);
//================================================================================================================================
// Площадь треугольника ABC.
//================================================================================================================================
double GEOMETRY_EXPORT squareTriangle(const Point2D &A, const Point2D &B, const Point2D &C);
//================================================================================================================================
// Проверка, принадлежит ли точка Z треугольнику ABC.
//================================================================================================================================
bool GEOMETRY_EXPORT pointInsideTriangle(const Point2D &A, const Point2D &B, const Point2D &C, const Point2D &Z);
#endif // GEOMETRY_H
geometry.cpp#include <math.h>
#include <float.h>
#include "geometry.h"
//================================================================================================================================
// Расстояние между точками A и B.
//================================================================================================================================
inline double GEOMETRY_EXPORT distance(const Point2D &A, const Point2D &B)
{
return sqrt((A.x() - B.x())*(A.x() - B.x()) + (A.y() - B.y())*(A.y() - B.y()));
}
//================================================================================================================================
// Площадь треугольника ABC.
//================================================================================================================================
inline double GEOMETRY_EXPORT squareTriangle(const Point2D &A, const Point2D &B, const Point2D &C)
{
return qAbs((B.x() - A.x())*(C.y() - A.y()) - (C.x() - A.x())*(B.y() - A.y()))/2.;
}
//================================================================================================================================
// Проверка, принадлежит ли точка Z треугольнику ABC.
//================================================================================================================================
bool GEOMETRY_EXPORT pointInsideTriangle(const Point2D &A, const Point2D &B, const Point2D &C, const Point2D &Z)
{
double s = squareTriangle(A, B, C);
double s1 = squareTriangle(Z, B, C);
double s2 = squareTriangle(A, Z, C);
double s3 = squareTriangle(A, B, Z);
if(qAbs(s - s1 - s2 - s3) < DBL_EPSILON)
return true;
else
return false;
}
При компиляции вываливается следующая ошибка:
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x16): undefined reference to `Point2D::x() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x21): undefined reference to `Point2D::x() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x2c): undefined reference to `Point2D::y() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x37): undefined reference to `Point2D::y() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x42): undefined reference to `Point2D::x() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x4d): undefined reference to `Point2D::x() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x58): undefined reference to `Point2D::y() const'
release/geometry.o:geometry.cpp:(.text$_Z14squareTriangleRK7Point2DS1_S1_[squareTriangle(Point2D const&, Point2D const&, Point2D const&)]+0x63): undefined reference to `Point2D::y() const'
collect2: ld returned 1 exit status
Есть подозрение, что проблема где-то в
const. Но где - я не понимаю, а просто удалять все
const не хочется.
Помогите, пожалуйста, разобраться.