0

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

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

  • См. по ссылке дубля раздел "Неправильная реализация шаблонного кода". – Harry Feb 17 '24 at 17:08

0 Answers0