使用向量来制作通用堆栈

时间:2014-12-06 01:22:55

标签: c++ templates

所以我试图定义一个堆栈类,然后使用向量来创建一个通用堆栈。出于某种原因,当我尝试创建一个新堆栈时,我收到一条错误,说没有声明,我理解这一点,因为它说没有什么是基本上做的,我从来没有真正成为一个新的对象。我的确遵循了如何制作通用堆栈的指南。 http://www.tutorialspoint.com/cplusplus/cpp_templates.htm

这是我使用的Stack类:

#ifndef stackers
#define stackers
#include <vector>

#include "Wrapper.hh"

template <class T>
class Stack { 
  private: 
    vector<T*> elems;
  public: 
    Stack();
    void push(T* obj);  // push element 
    T* pop();
    T* peek();           // pop element 
    T* findMax();
    T* findMin();
    bool isEmpty();
}; 
template <class T>
bool Stack<T>:: isEmpty(){
    return elems.size()==0;
}

template <class T>
void Stack<T>::push (T* obj) 
{ 
    // append copy of passed element 
    elems.push_back(obj);    
} 
template <class T>
T* Stack<T>::peek () 
{ 
    // append copy of passed element 
    elems.at(elems.size());    
} 

template <class T>
T* Stack<T>::pop () 
{ 
    if (elems.empty()) { 
        fatal("Stack<>::pop(): empty stack"); 
    }
    // remove last element 
    return elems.pop_back();         
} 

template<class T>
T* Stack<T>:: findMax(){
    T* temp=new T*;
    for(int i=0;i<elems.size();i++){
        if(elems.at(i)>temp)
            temp=elems.at(i);
    }
    return temp;
}

template<class T>
T* Stack<T>:: findMin(){
    T* temp;
    for(int i=0;i<elems.size();i++){
        if(elems.at(i)<temp)
            temp=elems.at(i);
    }
    return temp;
}
#endif

当我在我的主要电话中说这个时:

      Stack<Pictures> stackers;

图片是我在另一个类中创建的对象。 它抛出错误,“错误:声明不声明任何[-fpermissive]”。我假设我不需要构造函数,因为我跟随的例子。对于非主要数据类型,情况不是这样吗?

1 个答案:

答案 0 :(得分:6)

说完后

#define stackers

位于标题的最顶部,

Stack<Pictures> stackers;

变为

Stack<Pictures> ;

......确实没有宣布任何内容。