Шаблонный класс [дубликат]

200
09 апреля 2017, 03:52

На данный вопрос уже ответили:

  • Ссылка на неразрешенный внешний символ (возможные причины) 1 ответ
  • Вынести метод шаблонного класса в .cpp 3 ответа

Здравствуйте,помогите пожалуйста.Пытаюсь реализовать шаблонный класс с шаблонными функциями. Не понимаю в чем ошибка при компиляции, подскажите пожалуйста:

Error LNK2019 unresolved external symbol "public: void __thiscall Stack::Push(float)" (?Push@?$Stack@M@@QAEXM@Z) referenced in function _main Calc

и

Error LNK2019 unresolved external symbol "public: float __thiscall Stack::Pop(void)" (?Pop@?$Stack@M@@QAEMXZ) referenced in function _main Calc

Код(header):

#pragma once
template <class T>
struct Element
{
    T data;
    Element<T>* next;
};

///////////////////////////////////////
template <class T>
class Stack
{
private:
    Element<T>* Head;
public:
    Stack<T>() {}
    ~Stack<T>() {}
    void Push(T d);
    T Pop();
};

Определение методов:

 #include "Stack.h"
template<class T>
void Stack<T>::Push(T d)
{
    Element* new_Element = new Element;
    new_Element->data = d;
    new_Element->next = Head;
    Head = new_Element;
}
template <class T>
T Stack<T>::Pop()
{
    T temp = Head->data;
    Element *new_Element = Head;
    Head = Head->next;
    delete new_Element;
    return temp;
}

И main ():

 #include "Stack.h"
#include <iostream>

int main()
{
    Stack<float> s;
    int n;
    int value;
    std::cout << "How many values will you have?" << std::endl;
    std::cin >> value;
    for (int i(0); i < value; i++)
    {
        std::cout << " Enter number: ";
        std::cin >> n;
        s.Push(n);
    }
     while (true);
    {
        std::cout << "Enter symbol (space for exit):";
        int choice = getchar();
        switch (choice)
        {
        case '+':
            s.Push(s.Pop() + s.Pop());
            break;
        case '-':
            s.Push(-s.Pop() + s.Pop());
            break;
        case '*':
            s.Push(s.Pop()*s.Pop());
            break;
        case '/':
            s.Push(s.Pop() / s.Pop());
        /*case '=':
            std::cout <<"Result: "<< s.Pop()<<std::endl;
            break;*/
        case ' ':
            exit(-1);
            break;
        default:
            break;
        }
    }
    system("pause");
    return 0;
}

Не могу понять в чем проблема......

READ ALSO
Почему программа выдает ошибку на Q_OBJECT в классе, наследованный от QMainWindow?

Почему программа выдает ошибку на Q_OBJECT в классе, наследованный от QMainWindow?

Всем здравствуйтеЯ недавно начал учить фреймворк Qt

190
Output and input [требует правки]

Output and input [требует правки]

Не могу понять зачем нужен output и input и как его использовать

265
Постфиксное арифметическое выражение [требует правки]

Постфиксное арифметическое выражение [требует правки]

Нужно написать подпрограмму для вычисления постфиксных выражений, например:

194
Проверка на тип приложения

Проверка на тип приложения

Как можно проверить консольное ли приложение или оконное? Может в winapi есть какое-то описание процесса, его свойств?

168