队列实现错误C++; 当试图在C++中实现一个通用队列时,我面临着一个非常特殊的问题。代码如下: template <class T> class Queue { private: T * queue; int front; int back; int MAX_SIZE; public: Queue(){ Queue(SOME_PREDEFINED_CONSTANT); } Queue(int size){ queue = new T[size]; MAX_SIZE = size; front = 0; back = 0; cout << "inside constructor:" << " back= " << back << " front=" << front << endl; } void push(const T entry){ if(back < MAX_SIZE){ queue[back] = entry; back++; } } T peek(){ return queue[front]; } void pop(){ if(size() > 0){ front++; } if(front==back){ front = 0; back = 0; } } int size(){ cout << "size:" << " back=" << back << " front=" << front << endl; return (back-front); } }; 模板类队列{ 私人: T*队列; 内锋; int-back; int MAX_大小; 公众: 队列(){ 队列(一些预定义的常量); } 队列(整数大小){ 队列=新的T[大小]; 最大尺寸=尺寸; 正面=0; 后退=0; 当你这样做的时候 Queue(){ Queue(SOME_PREDEFINED_CONSTANT); }
发生的情况是,您在默认构造函数中创建了一个临时对象,该对象立即超出范围并被销毁 有两种解决方法:队列实现错误C++; 当试图在C++中实现一个通用队列时,我面临着一个非常特殊的问题。代码如下: template <class T> class Queue { private: T * queue; int front; int back; int MAX_SIZE; public: Queue(){ Queue(SOME_PREDEFINED_CONSTANT); } Queue(int size){ queue = new T[size]; MAX_SIZE = size; front = 0; back = 0; cout << "inside constructor:" << " back= " << back << " front=" << front << endl; } void push(const T entry){ if(back < MAX_SIZE){ queue[back] = entry; back++; } } T peek(){ return queue[front]; } void pop(){ if(size() > 0){ front++; } if(front==back){ front = 0; back = 0; } } int size(){ cout << "size:" << " back=" << back << " front=" << front << endl; return (back-front); } }; 模板类队列{ 私人: T*队列; 内锋; int-back; int MAX_大小; 公众: 队列(){ 队列(一些预定义的常量); } 队列(整数大小){ 队列=新的T[大小]; 最大尺寸=尺寸; 正面=0; 后退=0; 当你这样做的时候 Queue(){ Queue(SOME_PREDEFINED_CONSTANT); },c++,queue,C++,Queue,发生的情况是,您在默认构造函数中创建了一个临时对象,该对象立即超出范围并被销毁 有两种解决方法: 使用构造函数初始值设定项列表和委托构造函数的“新”方法: Queue() : Queue(SOME_PREDEFINED_CONSTANT) { /* empty */ } 使用默认参数的“旧”方法: template <class T> class Queue { ... public: Queue(int size = SOME_PREDEFINED_CONS
Queue() : Queue(SOME_PREDEFINED_CONSTANT)
{ /* empty */ }
template <class T> class Queue {
...
public:
Queue(int size = SOME_PREDEFINED_CONSTANT){
...
}
...
};
模板类队列{
...
公众:
队列(整数大小=一些预定义的常数){
...
}
...
};
Queue(){
Queue(SOME_PREDEFINED_CONSTANT);
}
发生的情况是,您在默认构造函数中创建了一个临时对象,该对象立即超出范围并被销毁
有两种解决方法:
Queue() : Queue(SOME_PREDEFINED_CONSTANT)
{ /* empty */ }
template <class T> class Queue {
...
public:
Queue(int size = SOME_PREDEFINED_CONSTANT){
...
}
...
};
模板类队列{
...
公众:
队列(整数大小=一些预定义的常数){
...
}
...
};
这:
Queue(){Queue(一些预定义的常数);
没有做您认为它正在做的事情。Queue():Queue(一些预定义的常数){
如前所述,默认构造函数不会初始化任何成员。在其主体中,它会创建并立即丢弃一个临时的队列,该队列没有任何效果。请阅读。除了@Igor:队列(int size=SOME\u预定义的\u常量)
实现了与“二合一”相同的效果。如果Queue
是在没有参数的情况下构造的,则将使用某个预定义的常量
作为默认值。此:Queue(){Queue(某个预定义的常量);
没有执行您认为它正在执行的操作。Queue():Queue(某个预定义的常量){
如前所述,默认构造函数不会初始化任何成员。在其主体中,它会创建并立即丢弃一个临时的队列,该队列没有任何效果。请阅读。除了@Igor:队列(int size=SOME\u预定义的\u常量)
实现了与“二合一”相同的效果。如果队列
是在没有参数的情况下构造的,则将某些预定义的常量
用作默认值。委托构造函数是C++14?@user463035818 C++11委托构造函数是C++14?@user463035818 C++11