Почему компилятор не может установить размер char [] = {..} в члене структуры, например, для объявления переменной?
Я использую struct
с инициализированным значением внутри структуры, как показано ниже. Я не понимаю, почему компилятор не может установить размер char[] = { .. }
в члене структуры, как это делается для объявления переменной? Clang++ дает следующую ошибку:
ошибка: привязка массива не может быть выведена из инициализатора в классе
код:
struct A
{
char s[] = { 'F', 'O', 'O', ... };
};
Ответы
Ответ 1
Элементы структуры не могут быть инициализированы, пока они созданы, потому что структура определяет тип, а не переменную, которая может быть инициализирована. Вы можете инициализировать только переменную структуры после создания объекта структуры
например
struct test
{
int var;
};
struct test struct_object = { 7 };
Ответ 2
Моя лучшая догадка заключается в том, что это касается проходов, которые делает компилятор. В первом проходе структура инициализируется, это означает, что в это время размер ДОЛЖЕН быть назначен, так что если массив будет размером [0]. Затем на более позднем этапе, когда он выполняет назначение, он не может хранить в массиве размера [0], и он не скомпилируется. Попробуйте дать размер, и это должно быть хорошей альтернативой:
#include <iostream>
using namespace std;
struct myStruct{
char myArray[4] = {'1','2','3','\0'};
};
int main()
{
myStruct Mystructure;
cout<<Mystructure.myArray;
return 0;
}
Другим решением было бы сделать это в списке инициализации базового члена для конструктора (который потребуется в этом случае), но я не уверен, как это сделать с массивом. Я бы подумал, что это сработает, хотя похоже, что это похоже на то, почему вы не можете инициализировать константы, если я должен был предположить.