Здравствуйте, есть такой класс:
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
), поэтому и получаете ошибку.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В проекте есть *qrc файл, в нём есть много ресурсов, Qt-шные классы легко получают ресурсы из *
Доброго времени суток Никак не получается разобраться с одним примером
ЗдравствуйтеЯ бы хотел задать вопрос по закрытому наследованию в C++