I tried to do this, but always come back with different problems. When I try to compile this program, I get 3 unresolved external files:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall DynIntStack<char>::~DynIntStack<char>(void)" ( ??1?$DynIntStack@D @@ QAE@XZ ) referenced in function _main 1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall DynIntStack<char>::pop(char &)" ( ?pop@ ?$DynIntStack@D @@ QAEXAAD@Z ) referenced in function _main 1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall DynIntStack<char>::push(char)" ( ?push@ ?$DynIntStack@D @@ QAEXD@Z ) referenced in function _main
DynIntStack.h
/**************************************************************************** DynIntStack class. Chad Peppers This class creates a object for stacking nodes In addition, there should be member functions to perform the following operations: - Push to the stack - Pop to the stack - Function to check if empty ****************************************************************************/ // Specification file for the DynIntStack class #ifndef DYNINTSTACK_H #define DYNINTSTACK_H template <class T> class DynIntStack { private: // Structure for stack nodes struct StackNode { T value; // Value in the node StackNode *next; // Pointer to the next node }; StackNode *top; // Pointer to the stack top public: // Constructor DynIntStack() { top = NULL; } // Destructor ~DynIntStack(); // Stack operations void push(T); void pop(T &); bool isEmpty(); }; #endif
DynIntStack.cpp
/**************************************************************************** DynIntStack class. Chad Peppers This class creates a object for stacking nodes In addition, there should be member functions to perform the following operations: - Push to the stack - Pop to the stack - Function to check if empty ****************************************************************************/ #include <iostream> #include "DynIntStack.h" using namespace std; /************************************************************************* Basic class constructor. Input Parameters: Information to build the stack Return Type: void *************************************************************************/ template<class T> DynIntStack<T>::~DynIntStack() { StackNode *nodePtr, *nextNode; // Position nodePtr at the top of the stack. nodePtr = top; // Traverse the list deleting each node. while (nodePtr != NULL) { nextNode = nodePtr->next; delete nodePtr; nodePtr = nextNode; } } /************************************************************************* Function to push an item in the stack Input Parameters: T Return Type: void *************************************************************************/ template<class T> void DynIntStack<T>::push(T num) { StackNode *newNode; // Pointer to a new node // Allocate a new node and store num there. newNode = new StackNode; newNode->value = num; // If there are no nodes in the list // make newNode the first node. if (isEmpty()) { top = newNode; newNode->next = NULL; } else // Otherwise, insert NewNode before top. { newNode->next = top; top = newNode; } } /************************************************************************* Function to pop an item in the stack Input Parameters: T Return Type: void *************************************************************************/ template<class T> void DynIntStack<T>::pop(T &num) { StackNode *temp; // Temporary pointer // First make sure the stack isn't empty. if (isEmpty()) { cout << "The stack is empty.\n"; } else // pop value off top of stack { num = top->value; temp = top->next; delete top; top = temp; } } /************************************************************************* Basic class deconstructor. Input Parameters: None Return Type: void *************************************************************************/ template<class T> bool DynIntStack<T>::isEmpty() { bool status; if (!top) status = true; else status = false; return status; }
main.cpp
#include <iostream> #include "DynIntStack.h" using namespace std; int main(){ int value = 0; char value2; //DynIntStack<int> stack; DynIntStack<char> stack1; cout << "Pushing 1\n"; stack1.push('T'); stack1.pop(value2); cout << value2; system("pause"); return 0; }
source share