c++ - 如何实例化从使用模板的纯虚拟类继承的对象
问题描述
我正在创建一个“Array_Base”接口,允许用户创建一个固定数组或任何类型的可扩展数组。现在我什至无法让常规 Array 工作。
我已将问题分解为几个最简单的组件,以尝试隔离问题。我相信这与我的实例化有关。我正在使用 Visual Studio 运行代码。
Array_Base.h
#ifndef _ARRAY_BASE_H_
#define _ARRAY_BASE_H_
#include <cstring> // for size_t definition
template <typename T>
class Array_Base
{
public:
typedef T type;
//Default Constructor
virtual void Array_Base(void) = 0;
// Destructor.
virtual ~Array_Base(void) = 0;
protected:
/// Pointer to the actual data.
T* data_;
/// Current size of the array.
size_t cur_size_;
/// Maximum size of the array.
size_t max_size_;
};
#endif // !defined _ARRAY_H_
数组.h
#ifndef _ARRAY_H_
#define _ARRAY_H_
#include <cstring> // for size_t definition
#include "Array_Base.h"
template <typename T>
class Array : public Array_Base
{
public:
/// Type definition of the element type.
typedef T type;
/// Default constructor.
Array (void);
///Destructor
~Array (void);
};
#include "Array.cpp"
#include "Array.inl"
#endif // !defined _ARRAY_H_
数组.cpp
#include <stdexcept> // for std::out_of_bounds exception
#include <iostream>
#define MAX_SIZE_ 20
template <typename T>
Array <T>::Array (void)
:data_(new T[MAX_SIZE_]),
cur_size_(0),
max_size_(MAX_SIZE_)
{ }
template <typename T>
Array <T>::~Array (void)
{
delete[] this->data_;
this->data_ = nullptr;
}
主要.cpp:
#include "Array.h"
int main(void)
{
Array_Base<int>* arr = new Array<int>();
delete arr;
}
我不断收到一条错误消息:“不能使用“Array”的值类型从 main 中“new”运算符下出现的红线初始化“Array_Base”类型的实体。
任何帮助将不胜感激。谢谢!
解决方案
template <typename T>
class Array : public Array_Base
Array_Base
没有命名一个类。您需要为其提供模板参数。
你是这个意思吗?
template <typename T>
class Array : public Array_Base<T>
推荐阅读
- flutter - 如何使用 _formKey 验证 TextFormField?
- python - 在 plotly 中的 scatterpolar 图之间切换
- json - 绑定解码没有对象路径的 JSON
- javascript - 我无法在 javascript 上设置计时器以重定向到另一个页面
- java - 我可以在 JAVA 超时后终止 Runnable 吗?
- javascript - 如何将我的数据保存在本地存储中?
- html - 链接仅在其全尺寸时打开
- bash - 如何在 bash 中编写查询字符串?
- ios - SwiftUI:如何在物理配置设备上预览视图?
- python - 关闭所有散景轴对象