Неразрешенные элементы
Пишу код на плюсах. Задача: сделать шаблон класса для рациональных чисел. Выдает ошибки:
1)LNK2019 ссылка на неразрешенный внешний символ "public: __cdecl Rational::Rational(int,int)" (??0?$Rational@H@@QEAA@HH@Z) в функции main.
2)NK2019 ссылка на неразрешенный внешний символ "public: virtual __cdecl Rational::~Rational(void)" (??1?$Rational@H@@UEAA@XZ) в функции main.
3)LNK2019 ссылка на неразрешенный внешний символ "public: class Rational __cdecl Rational::Plus(class Rational const &)" (?Plus@?$Rational@H@@QEAA?AV1@AEBV1@@Z) в функции main.
Что это за символы такие и как решить проблему?
//H.
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
template <typename T>
class Rational
{
public:
Rational();
Rational(T p, T q);
virtual ~Rational();
int GCD(T test_p, T test_q);
Rational Plus(const Rational& arg);
void Show(T test_p, T test_q);
private:
T p, q;
};
#endif
//CPP.
#include "Rational.h"
#include <iostream>
using namespace std;
template <typename T>
Rational<T>::Rational()
{
p = 0;
q = 1;
return Show(p, q);
}
template <typename T>
Rational<T>::Rational(T p, T q)
{
this->p = p;
this->q = q;
return Show(p, q);
}
template <typename T>
Rational<T>::~Rational()
{
}
template <typename T>
int Rational<T>::GCD(T test_p, T test_q)
{
while (test_p != 0 and test_q != 0)
{
if (test_p > test_q)
{
test_p = test_p % test_q;
}
else
{
test_q = test_q % test_p;
}
}
return (test_p + test_q);
}
template <typename T>
Rational<T> Rational<T>::Plus(const Rational& arg)
{
cout << "Операция сложения:\n" << p << "/" << q << " + " << arg.p << "/" << arg.q;
T p1, p2, num, denom;
p1 = p * arg.q;
p2 = arg.p * q;
num = p1 + p2;
denom = arg.q * q;
int gcd = GCD(num, denom);
return Show(num / gcd, denom / gcd);
}
template <typename T>
void Rational<T>::Show(T test_p, T test_q)
{
cout << " = " << test_p << "/" << test_q << endl;
}
//MAIN
#include <iostream>
#include "Rational.h"
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Число а";
Rational<int> a(3,1);
cout << "Число b";
Rational<int> b(2,10);
a.Plus(b);
system("pause");
return 0;
}