Продолжайте получать ошибку "слишком много инициализаторов" - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время я пытаюсь написать код для назначения, и когда я думал, что смогу это сделать, я получаю ошибку слишком многих инициализаторов, и это назначение, поэтому оно должно быть int

Это моя структура:

struct Address {
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};

Это мой код:

int main(void) {
    struct Address addy = { { 0,"",0,"","" } };

Когда я сбрасываю второй {}, он работает, но сервер, на который я загружаю, не примет его, если я не использую double {}.

Ответы [ 5 ]

3 голосов
/ 12 марта 2019

Вам не нужны двойные скобки, когда вы используете двойные скобки.Правильный инициализатор для типа структуры:

struct Address
{
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};

будет:

struct Address addr1 =
{
    319,                    // Street number
    "Honeydew Road",        // Street name
    207,                    // Apartment number
    "RG13 2PQ",             // Postal code
    "Reading"               // City
};

Используя C99 и назначенные инициализаторы, вы можете использовать:

struct Address addr2 =
{
    .apartmentNumber = 0,
    .streetNumber = 719,
    .streetName = "Persimmon Way",
    .city = "London",
    .postalCode = "EC1A 3JN",
};

Обратите внимание, чтос указанными инициализаторами порядок не критичен.

Если вы настаиваете на использовании двойных скобок, обратите внимание, что вы можете заключить инициализатор для регулярных скалярных переменных в скобки (или нет):

int i1 = 0;       // Legitimate
int i2 = { 0 };   // Also legitimate

Однако в инициализаторе структуры нельзя использовать фигурные скобки вокруг скаляров, но можно использовать массивы:

struct Address addy = { 0, { "" }, 0, { "" }, { "" } };

Попытка заключить в фигурные скобки либо 0 приводит к ошибкам компиляции.

3 голосов
/ 12 марта 2019

Приведенный ниже инициализатор является проблемой

struct Address addy = { { 0,"",0,"","" } }; 

, поскольку первый член struct Address, а именно streetNumber, не может быть инициализирован с помощью { 0,"",0,"","" }.

.Компилятор предупреждает вас.

У вас есть дополнительная пара скобок.Измените эту строку на:

struct Address addy = { 0, "", 0, "", "" }; 

Внесите аналогичные изменения в другие строки, где вы видите эту ошибку.

1 голос
/ 12 марта 2019
struct Address addy = { { 0,"",0,"","" } }

Вы пытаетесь инициализировать структуру с составным литералом, который не совместим со структурой Address.

Он пытается сопоставить составной литерал { { 0,"",0,"","" } } с вашей структурой и потому, что объединениене получается, вы получаете эту ошибку.

Если вы обрезаете внешнюю скобку (которая может успешно объединить неполный (или заполнен с размером = 1) массив структур Address) или если ваша структура Address будет вложена в другую структуруобъединение может быть успешным.

Так что вам нужно написать

 struct Address addy = { 0,"",0,"","" }
0 голосов
/ 12 марта 2019

Вы сделали любопытное заявление в своем посте:

Когда я сбрасываю второй {}, он работает, но сервер, на который я загружаю, не примет его, если я не использую double {}.

Синтаксис double {} будет работать, если вы объявите addy как массив:

struct Address addy[] = { { 0,"",0,"","" } };

Или, если Address был объявлен с его членами, встроенными в другую структуру:

struct Address {
    struct {
        int streetNumber;
        char streetName[41];
        int apartmentNumber;
        char postalCode[8];
        char city[41];
    };
};
0 голосов
/ 12 марта 2019

Вы использовали фигурные еще раз.

код, который вы делаете, означает addy.streetNumber = {0, "", 0, "", ""};

, и он делает ошибку.поскольку тип streetNumber просто "int", он не может иметь различные значения.

правильный код:

struct Address Addy = {0, "", 0, "", 0};

хорошего дня, чувак.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...