如何定义泛型类型的静态变量

时间:2015-05-28 04:44:48

标签: c++

我写了一个课程如下:

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 +的新手,任何人都可以建议我如何继续。

提前致谢

2 个答案:

答案 0 :(得分:2)

您的定义类型错误。它无法定义指针。它应该是:

template <class T>
T* StacknQueue<T>::stknqPtr = ...;

答案 1 :(得分:1)

你需要使它成为正确的类型 - 它在类中是T*,但在定义中是T

但是 - 你的类设计表明它的所有成员都不应该是静态的 - 否则每个实例都将共享相同的后备数据 - 而不是你通常想要的堆栈或队列。对于非静态成员,您不需要烦人的显式实例化 - 所以一切都变得容易。