0

我正在迁移一个旧项目以在较新版本的 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 及更高版本的正确方法是什么?

4

1 回答 1

0

int如果你把另一种类型放在它前面,它就行不通了。如果您简单地将其替换为std::_Array. 从上下文中可以清楚地看出这_ARRAY是一个宏。

我不相信 for 的定义_ARRAY是由您的 Visual C++ 6 编译器提供的。你应该试着找出它来自哪里。简单的解决方法可能是只包含定义它的文件。

否则,_ARRAY宏可能被定义为这样的:

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

或像这样:

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

您的代码还应该使用其他宏来进行分配和访问商店商品数组的元素。您是否在代码中看到其他类似的标识符_ARRAY?它们不一定会产生编译时错误,因为它们可能看起来像编译器未声明的函数,但是您也需要实现它们。

于 2014-08-13T00:54:21.607 回答