Как корректно вынести конструктор Triangle
Код реализован в h файле. После компиляции кода в main.cpp падают ошибки LNK2005 в main.cpp, LNK2005 в main.cpp, LNK1169 в main.cpp
#ifndef _FIGURE_
#define _FIGURE_
#define _USE_MATH_DEFINES
#include <vector>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point(int x, int y)
{
this->x = x;
this->y = y;
}
int get_x() { return x; }
int get_y() { return y; }
Point operator * (const Point& f);
Point operator + (const Point& f);
Point operator - (const Point& f);
double sqrt_point ();
};
// Родительский класс
class Figure
{
protected:
// Массив типа vector для значения сторон фигуры
vector<double> meaning;
public:
virtual double calc_area() = 0;
virtual double calc_perimetr() = 0;
virtual string name() = 0;
};
// Дочерний класс фигур Triangle для численных типов
template <typename T>
class Triangle : public Figure
{
public:
Triangle(T a, T b, T c)
{
if (a < b + c && b < a + c && c < b + a)
{
meaning.insert(meaning.end(), { a,b,c });
}
else throw ExceptionFigure("Error");
}
double calc_area();
string name()
{
return "Треугольник";
}
double calc_perimetr()
{
return meaning[0] + meaning[1] + meaning[2];
}
};
// Реализация методов для Triangle<t>
template<typename T>
double Triangle<T> :: calc_area()
{
double p = (meaning[0] + meaning[1] + meaning[2]) / 2;
return sqrt(p*(p-meaning[0])*(p - meaning[1])*(p - meaning[2]));
}
// Дочерний класс Triangle для типа Point
template <>
class Triangle<Point> : public Figure
{
public:
Triangle(Point a, Point b, Point c);
double calc_area()
{
Triangle<double> temp(meaning[0], meaning[1], meaning[2]);
return temp.calc_area();
}
string name()
{
return "Треугольник";
}
double calc_perimetr()
{
return meaning[0] + meaning[1] + meaning[2];
}
};
Triangle<Point> :: Triangle(Point a, Point b, Point c)
{
double a_b = (a - b).sqrt_point();
double b_c = (b - c).sqrt_point();
double c_a = (c - a).sqrt_point();
if (a_b < b_c + c_a && b_c < a_b + c_a && c_a < a_b + b_c)
{
meaning.insert(meaning.end(), { a_b,b_c,c_a });
}
else throw ExceptionFigure("Error");
}