Ссылка на неразрешенный внешний символ Stack
Пишу класс для стека. Stack.h
#pragma once
template<class T>
class Stack {
private:
T *elements = new T[0];
int length = 0;
public:
template <typename U>
friend Stack<U> & operator*(int x, Stack<U>& s);
Stack & operator+(Stack<T> &t);
Stack & operator*(int x);
Stack(T *elems = nullptr, int len = 0);
T push(T elem);
T pull();
bool empty();
~Stack();
};
template<class U>
Stack<U> & operator*(int x, Stack<U> & s) {
s.operator*(x);
return s;
};
Stack.cpp
#include "Stack.h"
template<class T>
Stack<T> & Stack<T>::operator+(Stack<T> &t) {
while (!t.empty()) {
push(t.pull());
}
return *this;
};
template<class T>
Stack<T> & Stack<T>::operator*(int x) {
int l = this->length;
T *els = new T[l];
for (int i = 0; i < l; i++)
els[i] = *(this->elements + i);
for (int j = 1; j < x; j++)
for (int i = 0; i < l; i++)
this->push(*(els + i));
return *this;
};
template<class T>
Stack<T>::Stack(T *elems, int len) : length(len), elements(elems) {};
template<class T>
T Stack<T>::push(T elem) {
T *el = new T[length + 1];
for (int i = 0; i < length; i++) {
el[i] = this->elements[i];
}
el[this->length] = elem;
this->length++;
delete[] this->elements;
this->elements = el;
return elem;
};
template<class T>
T Stack<T>::pull() {
if (length <= 0) {
throw "Error";
}
return this->elements[--this->length];
};
template<class T>
bool Stack<T>::empty() {
return this->length == 0;
};
template<class T>
Stack<T>::~Stack() {
delete[] this->elements;
};
main.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
int main()
{
setlocale(LC_ALL, "RU_ru");
int *a = new int[3];
a[0] = 2;
a[1] = 5;
a[2] = 10;
Stack<int> s1(a, 3);
Stack<double> s2;
s1.push(2);
s1.push(4);
s1.push(25);
Stack<int> s3;
s3.push(88);
s1 = s1 + s3;
s1 = s1 * 2;
s1 = 2 * s1;
s2.push(3.1);
s2.push(4.4);
s2.push(5.8);
s2.push(4.6);
cout << "Stack 1" << endl;
while (!s1.empty()) {
cout << s1.pull() << endl;
}
cout << "Stack 2" << endl;
while (!s2.empty()) {
cout << s2.pull() << endl;
}
}
При компиляции на любую операцию стека(конструктор, пуш, пул, деструктор) выдает "Ссылка на неразрешенный внешний символ". Но когда я описываю класс в том же файле, то всё работает