Создать объект в куче при использовании шаблонов классов - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу сделать это:

Array<int>* arr = new Array();

Но я продолжаю получать сообщение об ошибке: список аргументов для класса "Array" отсутствует.
Разве невозможно создать это в куче? Я не видел ни одного кода, который, кажется, делает это.

Я также попробовал другой способ, где я использую код:

Array<int>* arr;

, а затем попытался распечатать содержимоемассив, но он давал мне ошибку, что он еще не был создан. Если я не могу создать его в куче, как я могу создать его динамически. Я не знаю, что пользователь захочет вставить в него, в конце концов.

Вот весь мой код:

Array.h

#ifndef _ARRAY_H_
#define _ARRAY_H_

#include <cstring>          // for size_t definition

/**
 * @class Array
 *
 * Basic implementation of a standard array class for chars.
 */
template <typename T>
class Array 
{
    public:
        /// Type definition of the element type.
        typedef T type;

        /// Default constructor.
        Array (void);


    private:
        /// 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_;
};

#include "Array.inl"
//#include "Array.cpp"

#endif   // !defined _ARRAY_H_

Array.cpp

#include <stdexcept>         // for std::out_of_bounds exception
#include <iostream>
#include "Array.h"

#define MAX_SIZE_ 20

//
// Array
// Default Constructor 
template <typename T>
Array <T>::Array (void)
    :data_(new T[MAX_SIZE_]),
    cur_size_(0),
    max_size_(MAX_SIZE_)
{   }

Array.inl

//
// size
//
template <typename T>
inline
size_t Array <T>::size(void) const
{
    return this->cur_size_;
}

//
// max_size
//
template <typename T>
inline
size_t Array <T>::max_size(void) const
{
    return this->max_size_;
}

driver.cpp

#include <iostream>
//#include "Array_Base.h"
#include "Array.h"

int main(void)
{
    Array<int>* arr = new Array();
    std::cout << "Max size of array is: " << arr->max_size() << std::endl;

}

1 Ответ

0 голосов
/ 30 сентября 2019

Поскольку класс является шаблоном, просто Array не является полным типом. Вам необходимо включить тип шаблона. И нет необходимости в пустых скобках в конце.

Array<int>* arr = new Array<int>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...