Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何实例化从使用模板的纯虚拟类继承的对象_C++_Templates_Inheritance_Interface - Fatal编程技术网

C++ 如何实例化从使用模板的纯虚拟类继承的对象

C++ 如何实例化从使用模板的纯虚拟类继承的对象,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

我正在创建一个“Array_Base”界面,允许用户创建固定数组或任何类型的可扩展数组。现在我甚至不能让常规数组工作

我已将问题分解为几个最简单的组件,以尝试隔离问题。我相信这与我的实例化有关。我正在使用VisualStudio运行代码

数组_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_
\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基

这不是您的代码的唯一问题,但请看一看。