首页 > 解决方案 > 如何实例化从使用模板的纯虚拟类继承的对象

问题描述

我正在创建一个“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”类型的实体。

任何帮助将不胜感激。谢谢!

标签: c++templatesinheritanceinterface

解决方案


template <typename T>
class Array : public Array_Base

Array_Base没有命名一个类。您需要为其提供模板参数。

你是这个意思吗?

template <typename T>
class Array : public Array_Base<T>

推荐阅读