我写了一个课程如下:
template <class T>
/* Abstract class for stack n queue */
class StacknQueue
{
public:
StacknQueue(int = 10);
virtual int insert(const T&) = 0;
virtual int remove(T&) = 0;
virtual void display() = 0;
int isEmpty() const {return top == -1 || front == -1 || front > top ;}
int isFull() const { return top == size - 1 ;}
//virtual int isQEmpty const() = 0;
//virtual int isQFull const() = 0;
void initialize();
static int flag;
static int size;
//int rear;
static int front;
static int top;
static T *stknqPtr ;
};
当我尝试在类外定义变量stknqPtr时如下:
template <class T>
T StacknQueue<T> :: stknqPtr = new T[size];
它给我错误:
error C2040: 'stknqPtr' : 'float' differs in levels of indirection from 'float *'
我是c +的新手,任何人都可以建议我如何继续。
提前致谢
答案 0 :(得分:2)
您的定义类型错误。它无法定义指针。它应该是:
template <class T>
T* StacknQueue<T>::stknqPtr = ...;
答案 1 :(得分:1)
你需要使它成为正确的类型 - 它在类中是T*
,但在定义中是T
。
但是 - 你的类设计表明它的所有成员都不应该是静态的 - 否则每个实例都将共享相同的后备数据 - 而不是你通常想要的堆栈或队列。对于非静态成员,您不需要烦人的显式实例化 - 所以一切都变得容易。