无法将变量 '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,因为它被声明为常量

(我应该把这个贴在这里,因为我不能标记评论)