C++ 如何实例化从使用模板的纯虚拟类继承的对象
我正在创建一个“Array_Base”界面,允许用户创建固定数组或任何类型的可扩展数组。现在我甚至不能让常规数组工作 我已将问题分解为几个最简单的组件,以尝试隔离问题。我相信这与我的实例化有关。我正在使用VisualStudio运行代码 数组_Base.hC++ 如何实例化从使用模板的纯虚拟类继承的对象,c++,templates,inheritance,interface,C++,Templates,Inheritance,Interface,我正在创建一个“Array_Base”界面,允许用户创建固定数组或任何类型的可扩展数组。现在我甚至不能让常规数组工作 我已将问题分解为几个最简单的组件,以尝试隔离问题。我相信这与我的实例化有关。我正在使用VisualStudio运行代码 数组_Base.h #ifndef _ARRAY_BASE_H_ #define _ARRAY_BASE_H_ #include <cstring> // for size_t definition template <ty
#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_
\ifndef\u数组\u基_
#定义_数组_基_H_
#包括//用于尺寸定义
模板
类数组\u基
{
公众:
T型;
//默认构造函数
虚拟虚空数组_基(虚空)=0;
//析构函数。
虚~数组_基(void)=0;
受保护的:
///指向实际数据的指针。
T*数据;
///数组的当前大小。
大小\u t电流\u大小\u;
///数组的最大大小。
尺寸\u t最大尺寸\u;
};
#endif/!定义的数组_
数组.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_
\ifndef\u数组_
#定义_数组_H_
#包括//用于尺寸定义
#包括“Array_Base.h”
模板
类数组:公共数组\u基
{
公众:
///元素类型的类型定义。
T型;
///默认构造函数。
数组(void);
///析构函数
~Array(void);
};
#包括“Array.cpp”
#包括“Array.inl”
#endif/!定义的数组_
Array.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;
}
\include//for std::越界异常
#包括
#定义最大尺寸20
模板
数组::数组(空)
:data_uuT(新的[最大尺寸]),
电流大小(0),
最大尺寸(最大尺寸)
{ }
模板
数组::~数组(无效)
{
删除[]此->数据;
此->数据=空PTR;
}
Main.cpp:
#include "Array.h"
int main(void)
{
Array_Base<int>* arr = new Array<int>();
delete arr;
}
#包括“Array.h”
内部主(空)
{
数组_Base*arr=新数组();
删除arr;
}
我一直收到一个错误,上面写着:“不能使用“Array”的值类型从main中“new”操作符下出现的红线初始化“Array\u Base”类型的实体
任何帮助都将不胜感激。谢谢!模板
类数组:公共数组\u基
Array\u Base
未命名类。您需要为其提供模板参数
你是说这个吗
模板
类数组:公共数组\u基
这不是您的代码的唯一问题,但请看一看。