【发布时间】:2021-01-10 17:30:06
【问题描述】:
晚安。 我在 C++ 中实现一个包含模板和虚函数的赋值,所以当我调用参数化构造函数时,它给了我错误“无法将变量 'ML' 声明为抽象类型'MyList'”
#include <bits/stdc++.h>
using namespace std;
template <typename T>
class MyList
{
protected:
int arraySize;
T *arr;
public:
MyList<T>(){}
MyList<T>(int arraySize)
{
this->arraySize = arraySize;
this->arr = new T[arraySize];
}
int getSize()
{
return this->arraySize;
}
//virtual void addElem() = 0;
virtual int getElem() = 0;
//virtual bool isEmpty() = 0;
///virtual bool isFull() = 0;
///virtual void clearItems() = 0;
~MyList()
{
delete [] this->arr;
}
};
template <typename C>
class MyStack : public MyList<C>
{
public:
int getElem()
{
return 2;
}
};
int main()
{
MyStack <int> MS;
MyList <int> ML(5);
MS.getElem();
}
很抱歉将源代码、main 和 headers 实现在一个文件中,但它是分配交付所必需的。 提前致谢。
【问题讨论】:
-
你有一个带有纯虚函数的抽象类。这样的类不能被实例化(这就是抽象的意思)——它需要派生,并且那些纯虚函数需要在派生类中被覆盖。
MyList<int>是模板实例化这一事实无关紧要。 -
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?
标签: c++ templates virtual-functions