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

C++ 如何定义泛型类型的静态变量,c++,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

我写了一节课,内容如下:

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 ;
};
template <class T>
    T StacknQueue<T> :: stknqPtr = new T[size];
我是C++新手,有人能建议我怎么继续下去吗?
提前感谢

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

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

不,您不需要对每种类型进行显式实例化,@vsoftco-您很正确-我一定是记错了什么。考虑它被擦除。@ VSOFTCO只是要清楚,你必须把它放在H中的定义中,而不是在一个分离的.CPP文件中,就像你对一个正常的、非模板化的静态成员一样。@米克兰德森是的,的确,否则它不会是ODR ED。不,你不需要为每个类型明确的实例化,@vsoftco-你说得对-我一定是记错了什么。考虑它被擦除。@ VSOFTCO只是要清楚,你必须把它放在H中的定义中,而不是在一个分离的.CPP文件中,就像你对一个正常的、非模板化的静态成员一样。@米克兰德森是的,的确,否则它不会是ODR ED。不,你不需要为每个类型明确的实例化,@vsoftco-你说得对-我一定是记错了什么。考虑它被擦除。@ VSOFTCO只是要清楚,你必须把它放在H中的定义中,而不是在一个分离的.CPP文件中,就像你对一个正常的、非模板化的静态成员一样。@米克兰德森是的,的确,否则它不会是ODR ED。不,你不需要为每个类型明确的实例化,@vsoftco-你说得对-我一定是记错了什么。考虑它被擦除。@ VSOFTCO只是要清楚,你必须把它放在H中的定义中,而不是在一个分离的.CPP文件中,就像你对一个正常的、非模板化的静态成员一样。@米克兰德森是的,的确,否则它不会是ODR-ED。