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>
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable