无法将变量 'x' 声明为抽象类型 'Queue<int>'
Cannot declare variable 'x' to be of abstract type 'Queue<int>'
我正在构建一个从抽象 class 继承的队列 class,当我测试我的构造函数时,我一直遇到这个错误,我不明白为什么:
"Cannot declare variable 'x' to be of abstract type 'Queue'"
"because the following virtual functions are pure within '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
在 class 队列中:
virtual void pop( );
将它拼写为 pop,而不是 Pop,即可解决问题。 c++ 区分大小写。
我不确定您的错误消息的原因(不同的编译器?),但它应该是:
error: 'void Abstractclass<Elem>::pop(void)': is abstract
我认为你的 linker 说:'undefined reference to...' 所以修复程序可以正常编译,但你没有 link 的定义,例如:
Abstractclass() { }
virtual ~Abstractclass() { }
和:
Queue (int)
:maxsize( 2 )
{ }
~Queue() { }
virtual void pop( ) { }
请注意,您必须初始化 maxsize,因为它被声明为常量
(我应该把这个贴在这里,因为我不能标记评论)
我正在构建一个从抽象 class 继承的队列 class,当我测试我的构造函数时,我一直遇到这个错误,我不明白为什么:
"Cannot declare variable 'x' to be of abstract type 'Queue'"
"because the following virtual functions are pure within '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
在 class 队列中:
virtual void pop( );
将它拼写为 pop,而不是 Pop,即可解决问题。 c++ 区分大小写。
我不确定您的错误消息的原因(不同的编译器?),但它应该是:
error: 'void Abstractclass<Elem>::pop(void)': is abstract
我认为你的 linker 说:'undefined reference to...' 所以修复程序可以正常编译,但你没有 link 的定义,例如:
Abstractclass() { }
virtual ~Abstractclass() { }
和:
Queue (int)
:maxsize( 2 )
{ }
~Queue() { }
virtual void pop( ) { }
请注意,您必须初始化 maxsize,因为它被声明为常量
(我应该把这个贴在这里,因为我不能标记评论)