所以我试图定义一个堆栈类,然后使用向量来创建一个通用堆栈。出于某种原因,当我尝试创建一个新堆栈时,我收到一条错误,说没有声明,我理解这一点,因为它说没有什么是基本上做的,我从来没有真正成为一个新的对象。我的确遵循了如何制作通用堆栈的指南。 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]”。我假设我不需要构造函数,因为我跟随的例子。对于非主要数据类型,情况不是这样吗?
答案 0 :(得分:6)
说完后
#define stackers
位于标题的最顶部,
Stack<Pictures> stackers;
变为
Stack<Pictures> ;
......确实没有宣布任何内容。