Всем добрый день! пиши программу, вроде все функции класса объявил и реализовал, в 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})
