Здравствуйте, есть такой класс:
template<typename T>
class DynamicArray
{
public:
DynamicArray(int size);
~DynamicArray(void);
void Add(T element);
T Get(int index);
void Resize(int newSize);
//void Show();
private:
T* _box[];
int _currentSize;
int _currentPosition;
};
template<typename T>
DynamicArray<T>::DynamicArray(int size) {
_box = new T[size];
_currentSize = size;
_currentPosition = 0;
}
template<typename T>
DynamicArray<T>::~DynamicArray(void) {
delete[] _box;
}
Но почему-то в строчке
T* _box[]
показывает такую ошибку:
error C2229: class 'DynamicArray<T>' has an illegal zero-sized array
Объясните, пожалуйста, почему.
Попробуй в определении класса изменить...
T* _box[];
на
T* _box;
По всей видимости, в вашем случае проблема в простой синтаксической ошибке. Но раз уж спросили почему, добавлю пояснение.
T* _box[];
Это объявление определяет буфер _box указателей на T неопределенного размера, причем содержимое этого массива есть часть вашей структуры.
В таком случае говорят о структурах переменного размера. При выделении памяти под такую структуру размер буфера _box определяется следующим образом:
bufferSize = (bytesAllocated - sizeof(DynamicArray<T>)) / sizeof(T)
bytesAllocated - размер блока памяти, выделенного под структуру)Очевидно, что если после такого буфера объявлены еще какие-то члены, то их смещение в структуре определить невозможно. Поэтому структура может содержать не более одного буфера неопределенного размера и только в конце. Вы объявляете после буфера еще 2 члена ( _currentSize и _currentPosition), поэтому и получаете ошибку.
Продвижение своими сайтами как стратегия роста и независимости