【发布时间】:2016-07-04 04:57:25
【问题描述】:
我正在构建一个从抽象类继承的 Queue 类,当我测试我的构造函数时,我一直遇到这个错误,我不明白为什么:
“不能将变量‘x’声明为抽象类型‘队列’”
"因为下面的虚函数在'Queue'中是纯的"
"void Abstractclass::pop() [Elem=int]"
MAIN.CPP:
#include "abstractclass.h"
#include "queue.h"
#include "stack.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
Queue<int> x(10);
getch();
return 0;
}
抽象类.H:
#ifndef ABSTRACTCLASS_H
#define ABSTRACTCLASS_H
#include <iostream>
using namespace std;
template <class Elem>
class Abstractclass
{
public:
Abstractclass();
virtual ~Abstractclass();
virtual void pop()=0;
};
#endif // ABSTRACTCLASS_H
队列.H:
#ifndef QUEUE_H
#define QUEUE_H
#include "abstractclass.h"
template <class Elem>
class Queue: public Abstractclass <Elem>
{
public:
Queue(int);
~Queue();
void Pop(const Elem &item);
private:
Elem *data;
const int maxsize;
int firstdata;
int lastdata;
int queuesize;
};
#endif // QUEUE_H
【问题讨论】:
-
void pop()与void Pop(const Elem &item)不同。你需要在派生类中实现void pop()。 -
OT:
void Pop(const Elem &item);应该怎么做?对于我对队列的理解,这看起来不正确.... -
@CaptainObvlious 您好,非常感谢您的回答。现在我更正了这个问题,我得到一个“未定义的对 'Queue
::Queue(int) 的引用”错误你知道原因吗?? -
因为你没有定义那个构造函数。找一本关于 C++ 的好书,从基础开始。
-
@JonathanWakely 好吧,Pretentious 先生
标签: c++ templates inheritance polymorphism pure-virtual