Почему компилятор не может установить размер 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;
}

Другим решением было бы сделать это в списке инициализации базового члена для конструктора (который потребуется в этом случае), но я не уверен, как это сделать с массивом. Я бы подумал, что это сработает, хотя похоже, что это похоже на то, почему вы не можете инициализировать константы, если я должен был предположить.