I'm trying to make a stack of strings and I'm getting ambiguous symbol errors on lines 22, 30, 43, and 58. The error is coming from the word stack, but I thought I was supposed to use the class name. Can anyone help me understand what is causing this?
#include <iostream> #include <stack> #include <string> using namespace std; //Define the stack class, set default stack size to 7 //use a template to define type at later point template<class T,int size=7> class stack { private: T data[size]; int stack_ptr; public: stack(void); void push(T x); T pop(); T top(); }; //constructor function to initialize stack and data template<class T,int size> stack<T,size>::stack(void) { int i; for(i=0;i<size;i++) data[i]=0; stack_ptr=0; } //Push data onto stack template<class T,int size> void stack<T,size>::push(T x) { if(stack_ptr>=size) { cout<<"cannot push data: stack full"<<endl; return; } data[stack_ptr++]=x; cout<<"Pushed\t" << x << "\tonto the stack"<<endl; return; } //Pop data from stack template<class T,int size> T stack<T,size>::pop() { if(stack_ptr<=0) { cout<<"cannot pop data: stack empty"<<endl; return data[0]; } cout<<"popped\t"<< data[--stack_ptr]<< "\tfrom stack"<<endl; return data[stack_ptr]; } int main() { //declaring stack of strings and using default size stack<string> c; string w; string name1 = "Rich"; string name2 = "Debbie"; string name3 = "Robin"; string name4 = "Dustin"; string name5 = "Philip"; string name6 = "Jane"; string name7 = "Joseph"; c.push(name1); c.push(name2); c.push(name3); c.push(name4); c.push(name5); c.push(name6); c.push(name7); //pick up the stack value w=c.pop(); string & i = c.top( ); string next_top = c.top(); cout << "The top person the stack is " << next_top << "."<< endl; return 0; }