我正在构建一个继承自抽象类的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;
}
ABSTRACTCLASS.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
QUEUE.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
答案 0 :(得分:0)
在课程队列中:
virtual void pop( );
拼写它弹出,而不是Pop,会修复它。 c ++区分大小写。
我不确定为什么你的错误信息,(不同的编译器?),但应该是:
error: 'void Abstractclass<Elem>::pop(void)': is abstract
我认为你的链接器说:&#39;未定义引用...&#39;所以修复编译得很好但你没有链接的定义,比如:
Abstractclass() { }
virtual ~Abstractclass() { }
和
Queue (int)
:maxsize( 2 )
{ }
~Queue() { }
virtual void pop( ) { }
请注意,必须初始化maxsize,因为它被声明为常量
(我应该在这里张贴这个,因为我可以记下评论)