Illegal zero-sized array

218
19 декабря 2016, 19:53

Здравствуйте, есть такой класс:

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

Объясните, пожалуйста, почему.

Answer 1

Попробуй в определении класса изменить...

T* _box[];

на

T* _box;
Answer 2

По всей видимости, в вашем случае проблема в простой синтаксической ошибке. Но раз уж спросили почему, добавлю пояснение.

T* _box[];

Это объявление определяет буфер _box указателей на T неопределенного размера, причем содержимое этого массива есть часть вашей структуры. В таком случае говорят о структурах переменного размера. При выделении памяти под такую структуру размер буфера _box определяется следующим образом:

bufferSize = (bytesAllocated - sizeof(DynamicArray<T>)) / sizeof(T)
  • (bytesAllocated - размер блока памяти, выделенного под структуру)

Очевидно, что если после такого буфера объявлены еще какие-то члены, то их смещение в структуре определить невозможно. Поэтому структура может содержать не более одного буфера неопределенного размера и только в конце. Вы объявляете после буфера еще 2 члена ( _currentSize и _currentPosition), поэтому и получаете ошибку.

READ ALSO
C++ С чего начать?

C++ С чего начать?

С чего начать изучение C++? Мне 14 летМатематику знаю хорошо

310
Не получается использовать *.qrc

Не получается использовать *.qrc

В проекте есть *qrc файл, в нём есть много ресурсов, Qt-шные классы легко получают ресурсы из *

240
Преобразование к базовому классу

Преобразование к базовому классу

Доброго времени суток Никак не получается разобраться с одним примером

300
Закрытое наследование в C++

Закрытое наследование в C++

ЗдравствуйтеЯ бы хотел задать вопрос по закрытому наследованию в C++

292