Я перевожу старый проект для компиляции в новых версиях Visual Studio.
Я получаю ошибку компилятора C4430 при компиляции старой структуры:
struct SHOP_ITEM_LIST
{
char title[50];
char description[200];
_ARRAY(SHOP_ITEM); // Another Struct with some integer and char array values
};
Я исследовал эту ошибку и обнаружил, что начиная с VC ++ 2005 пропущенные спецификаторы типов больше не разрешены. Это больше не интерпретируется как целое число.
Я не знаком с std :: _ Array< _Tp> и не знаю, как он себя ведет, когда используется в структуре с sizeof ().
Было бы int _ARRAY(SHOP_ITEM);
просто сделать трюк, или он будет манипулировать размером структуры?
Как правильно обновить эту структуру до VC ++ 2005 и выше?
Это не будет работать, если вы поставите другой тип, как int
перед ней. Это также не будет работать, если вы просто замените его на шаблон, как std::_Array
, Из контекста ясно, что _ARRAY
был макрос.
Я не верю определению _ARRAY
был предоставлен вашим компилятором Visual C ++ 6. Вы должны попытаться выяснить, откуда это. Простое исправление может заключаться в том, чтобы просто включить файл, который его определяет.
В противном случае, то _ARRAY
макрос, вероятно, был определен как-то так:
#define _ARRAY(type) type _array_##type[1]
или вот так:
#define _ARRAY(type) type *_array_##type
Также должны быть другие макросы, которые ваш код использует для распределения и доступа к элементам массива магазина. Видите ли вы другие идентичные идентификаторы _ARRAY
в вашем коде? Они не обязательно будут генерировать ошибки времени компиляции, так как они, вероятно, будут выглядеть как необъявленные функции для компилятора, однако вам также потребуется их реализовать.