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。