Ошибка слишком многих инициализаторов для простого массива в bcc32
Компиляция следующего примера
struct S {};
int main() {
S array[1] = { S() };
}
с bcc32 я получаю следующую ошибку:
[bcc32 Error] test.cpp(4): E2225 Too many initializers
Это ошибка в BCC32 или я что-то упустил, и приведенный выше пример не является допустимым C++?
И Clang, и GCC компилируют этот пример без проблем.
1 ответ
Borland BDS2006 (и, возможно, более новые версии)
имеет некоторые проблемы с конструктором / деструктором по умолчанию для class
а также struct
внутри своего C++ движка.
- см. bds 2006 C Скрытые конфликты диспетчера памяти для получения дополнительной информации.
Добавление собственного (даже пустого) конструктора / деструктора решает многие проблемы, даже ваши. Пытаться:
struct S
{
S(){};
S(S& a){};
~S(){};
S* operator = (const S *a){};
//S* operator = (const S &a){}; // use this only if you have dynamic allocation members
};
int main()
{
S array[1] = { S() };
}
Я пробовал это в BDS2006, и похоже, что это работает (трудно сказать, ничего внутри struct
) но вы можете скомпилировать и запустить хотя бы...
Сначала я обнаружил такое поведение в BDS2006... на самом деле не пробовал BCB6, так как он с самого начала был бесполезным, и отклонил его через несколько дней (я думаю, что худший BCB, когда-либо даже превосходивший BCB3,4) в BCB5 был в порядке (до BDS2006) это была моя любимая IDE), поэтому они должны были изменить движок C++ (не путать с библиотеками времени выполнения!!!).
Добавление даже пустого конструктора деструктора помогает. Если вы получили динамическое распределение, вам нужно обрабатывать грубые. Если вы получили вложенный класс / структуру, не забудьте также добавить их к ним.