Ошибка undefined reference при линковка со статической библиотекой

Всем добрый день! пиши программу, вроде все функции класса объявил и реализовал, в cmake все. Но компилятор выдает ошибку undefined reference(на скриншоте видно).

main.cpp

#include <bits/stdc++.h>
#include "mystack/mystack.h"

using namespace std;

template<class DATA>
void Multipliers(int n, MyStack<DATA> &stack){
    for(int i = 2; i*i < n; ++i){
        while(n % i == 0){
            stack.push(i);
            n /= i;
        }
    }
    if(n != 1)stack.push(n);
}

int main() {
    setlocale(LC_ALL, "Russian");
    int N = 1243453;
    MyStack<int> stack;
    Multipliers(N, stack);
    vector<int> ans;
    while (!stack.empty()) {
        ans.push_back(stack.top_inf());
        stack.pop();
    }
    cout << N << "=";
    for(int i = 0; i < ans.size(); ++i){
        if(i == ans.size()-1){
            cout << ans[i];
            break;
        }
        cout << ans[i] << " * ";
    }
    cout << '\n';
    cout << N << "=";
    for(int i = ans.size()-1; i >= 0; --i){
        if(i == 0){
            cout << ans[i];
            break;
        }
        cout << ans[i] << " * ";
    }
    return 0;
}

mystack.cpp

#include "mystack.h"

template<class INF>
MyStack<INF>::MyStack() : top(nullptr) {}

template<class INF>
MyStack<INF>::~MyStack() {
    while (top != nullptr) {
        pop();
    }
}

template<class INF>
bool MyStack<INF>::empty() {
    return top == nullptr;
}

template<class INF>
bool MyStack<INF>::push(INF n) {
    Node *newNode = new Node();
    if (newNode == nullptr) {
        return false;
    }
    newNode->d = n;
    newNode->next = top;
    top = newNode;
    return true;
}

template<class INF>
bool MyStack<INF>::pop() {
    if (empty()) {
        return false;
    }
    Node *temp = top;
    top = top->next;
    delete temp;
    return true;
}

template<class INF>
INF MyStack<INF>::top_inf() {
    if (empty()) {
        throw "Stack is empty!";
    }
    return top->d;
}

mystack.h

#ifndef MYSTACK_h
#define MYSTACK_h

template<class INF, class FRIEND>
class ListNode {
private:
    INF d;
    ListNode *next;
    ListNode(void) { next = nullptr; }
    friend FRIEND;
};

template<class INF>
class MyStack {
private:
    typedef class ListNode<INF, MyStack<INF>> Node;
    Node *top;
public:
    MyStack();
    ~MyStack();
    bool empty();
    bool push(INF n);
    bool pop();
    INF top_inf();
};

#endif

cmake основного проекта

cmake_minimum_required(VERSION 3.23)

set(project "lab4")
project(${project})

set(CMAKE_CXX_STANDARD 17)

set(${project}_SOURCES
        main.cpp)

add_subdirectory(mystack)

set(${project}_SOURCE_LIST
        ${${project}_SOURCES})

add_executable(${project}
        ${${project}_SOURCE_LIST})


target_link_libraries(${project} mystack)

cmake статической библиотеки mystack

cmake_minimum_required(VERSION 3.23)

set(project "mystack")
project(${project})

set(CMAKE_CXX_STANDARD 17)

set(${project}_SOURCES
        mystack.cpp)

set(${project}_HEADERS
        mystack.h)

set(${project}_SOURCE_LIST
        ${${project}_SOURCES}
        ${${project}_HEADERS})

add_library(${project}
        STATIC
        ${${project}_SOURCE_LIST})

введите сюда описание изображения Прошу помочь


Ответы (0 шт):