当我声明一个像这样的新队列对象时,exe停止工作:
arrayQueue myQueue;
myQueue.enqueue("111");
char* x=myQueue.dequeue();
cout<<x<<endl;
当我使用new创建对象时,它可以工作:
arrayQueue* myQueue=new arrayQueue();
myQueue->enqueue("111");
char* x=myQueue->dequeue();
cout<<x<<endl;
那么问题是什么?以下代码是我写的“队列”:
在.h头文件中:
class arrayQueue{
private:
array<char*,100> queueContrainer;
int maxSize;
int head;
int tail;
public:
arrayQueue();
~arrayQueue();
bool isEmpty();
bool isFull();
int getSize();
void enqueue(char*);
char* dequeue();
};
在.cpp中实现(仅在此处上传构造函数:
arrayQueue::arrayQueue(){
head=0;
tail=0;
maxSize=100;
for(array<char*,100>::iterator it1=queueContrainer.begin();it1!=queueContrainer.end();++it1){
*it1="Empty";
}
}
的main.cpp; arrayQueue.cpp; arrayQueue.h。要编译的三个文件:
https://drive.google.com/file/d/0B5FCKG1I8ce0R1RORUFYWFhUN0E/edit?usp=sharing
https://drive.google.com/file/d/0B5FCKG1I8ce0QlBCTzdBUlJfZG8/edit?usp=sharing
https://drive.google.com/file/d/0B5FCKG1I8ce0SGdWOVg1RzNTNW8/edit?usp=sharing
答案 0 :(得分:0)
在第一行
queue myQueue;
您正在创建一个类型为'queue'的对象,可能是std :: queue,它没有'enqueue'或'dequeue'方法。
答案 1 :(得分:0)
你有一个有效的析构函数吗?在第二个示例中,myQueue
指向的对象不会被删除,并且析构函数永远不会被调用。
在第一个示例中,myQueue
在超出范围时被删除,并且将自动调用析构函数。如果您的构造缺失或有缺陷,程序将无法编译或运行。