Использование неопределенного std :: _ ARRAY в структурах после VC ++ 2005

Я перевожу старый проект для компиляции в новых версиях 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 и выше?

0

Решение

Это не будет работать, если вы поставите другой тип, как int перед ней. Это также не будет работать, если вы просто замените его на шаблон, как std::_Array, Из контекста ясно, что _ARRAY был макрос.

Я не верю определению _ARRAY был предоставлен вашим компилятором Visual C ++ 6. Вы должны попытаться выяснить, откуда это. Простое исправление может заключаться в том, чтобы просто включить файл, который его определяет.

В противном случае, то _ARRAY макрос, вероятно, был определен как-то так:

#define _ARRAY(type) type _array_##type[1]

или вот так:

#define _ARRAY(type) type *_array_##type

Также должны быть другие макросы, которые ваш код использует для распределения и доступа к элементам массива магазина. Видите ли вы другие идентичные идентификаторы _ARRAY в вашем коде? Они не обязательно будут генерировать ошибки времени компиляции, так как они, вероятно, будут выглядеть как необъявленные функции для компилятора, однако вам также потребуется их реализовать.

0

Другие решения


По вопросам рекламы [email protected]