【发布时间】:2019-09-29 21:46:35
【问题描述】:
我想这样做:
Array<int>* arr = new 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;
}
【问题讨论】:
-
投票结束是一个错字。
Array<int>* arr = new Array();应该是Array<int>* arr = new Array<int>();或者更简单的auto arr = new Array<int>();。 -
#define _ARRAY_H_这是一个保留的标识符。通过定义它,您的程序将具有未定义的行为。您应该使用另一个标头保护。 -
为什么不直接使用
Array<int> arr;?
标签: c++ templates heap-memory