无法将变量'x'声明为抽象类型'Queue <int>'

时间:2016-03-17 17:15:31

标签: c++ templates inheritance polymorphism pure-virtual

我正在构建一个继承自抽象类的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

1 个答案:

答案 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,因为它被声明为常量

(我应该在这里张贴这个,因为我可以记下评论)