2017-02-17 9 views
-1

Я нашел Любопытную -структуру в иностранном ПО:любопытно поведение расположенного структуры

*struct YINIT yInit = 
{ 
    "bla", "miao", 1, 0, (uint16_t[]) 
    { 
    SWAPINT(0x200) 
    } 
};* 

Я не проверить это, и я не видел раньше. Можете ли вы помочь понять это?

Моя проблема, компилятор плюет предупреждающее сообщение: устаревшего преобразования из строки константы «полукокса» *

Но без понимания я не могу помочь моему компилятору ...

+1

Это объявление переменной типа 'struct YINIT'. Проверьте свои корни и как работает '' '' '' '' '' '' C '' ''. – DeiDei

+0

Пожалуйста, покажите определение 'YINIT'. И удалите звездочки, если они используются для акцента и не присутствуют в фактическом коде. – Angew

+1

Первые два параметра должны быть объявлены как 'const char *' в структуре 'YINIT'. – Zefick

ответ

1

Объявляет и инициализирует переменная типа struct YINIT. Вы не указали определение структуры, но ошибка понятна.

Структура имеет элементы типа char*, и эти элементы инициализируются строковыми литералами. До C++ 11 такое преобразование было просто устарело, следовательно, предупреждение. Поскольку C++ 11 такое преобразование плохо сформировано, и компилятор может вообще не принять его.

Решение: Измените тип членов на const char* или не инициализируйте их, чтобы указать на строковые литералы.

+1

Существует третья возможность: 'const_cast (" bla ")'. Это ужасно, но если вы не можете исправить определение 'YINIT', это может быть наименее болезненное решение. –