m0_54906215 2021-01-28 09:29 采纳率: 100%
浏览 72
已采纳

在vs2019中用基类指针指向派生类,为什么会报错?

小白一只,学习类模板的时候遇到一点问题

下面的代码中seqQueue是派生类

queue是基类,queue的成员函数都是纯虚函数

在主函数中用基类的指针指向派生类,为什么会报错?

#include<iostream>
using namespace std;
#include"CHAPTER4_2.h"

int main(){
	seqQueue<int> a(5);
	queue<int>* b = &a;
	int x;
	for (int i = 0; i < 5; i++) {
		cin >> x;
		b->enQueue(x);
	}
	cout << b->getHead() << endl;
	b->deQueue();
	cout << b->getHead() << endl;
	return 0;
}

基类定义:

#ifndef CHAPTER4_1
#define CHAPTER4_1

#include<iostream>
using namespace std;

template<class elemType>
class queue
{
public:
	virtual bool isEmpty()const = 0;
	virtual void enQueue(const elemType& x) = 0;
	virtual elemType deQueue() = 0;
	virtual elemType getHead()const = 0;
	virtual ~queue(){}
};

#endif // !CHAPTER4_1

派生类定义:

#ifndef CHAPTER4_2
#define CHAPTER4_2

#include<iostream>
using namespace std;
#include"CHAPTER4_1.h"

template<class elemType>
class seqQueue:public queue{
private:
	elemType* elem;
	int maxSize;
	int rear, front;
	void doubleSpace() {
		elemType* tmp = elem;
		elem = new elemType[maxSize * 2];
		for (int i = 1; i < maxSize; i++) {
			elem[i] = tmp[(front + i) % maxSize];
		}
	}

public:
	seqQueue(int size = 10)
	{
		elem = new elemType[size];
		rear = front = 0;
		maxSize = size;
	}
	~seqQueue()
	{
		delete[]elem;
	}


	bool isEmpty()const
	{
		return rear == front;
	}
	void enQueue(const elemType& x)
	{
		if ((rear + 1) % maxSize == front)doubleSpace();
		rear = (rear + 1) % maxSize;
		elem[rear] = x;
	}
	elemType deQueue() {
		front = (front + 1) % maxSize;
		return elem[front];
	}
	elemType getHead()const
	{
		return elem[(front + 1) % maxSize];
	}
};

#endif // !CHAPTER4_2

报错截图:

  • 写回答

1条回答 默认 最新

  • 幻灰龙 2021-01-28 09:48
    关注

    1. C++的模板类型是编译期的行为,编译的时候需要确定模板的参数类型。

    2. 你的代码里继承的地方并没有指明queue的模板参数类型:

    template<class elemType> class seqQueue:public queue

    3. 修改一下即可:

    template<class elemType> class seqQueue:public queue<elemType>
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败