数组下标不是整数

时间:2011-03-27 13:47:09

标签: objective-c c arrays int

int i;

va_list objects_list;
va_start(objects_list, objects);
for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++);
objectsInArray = malloc(sizeof(id) * i);
va_end(objects_list);

// ... (malloc NULL checking is here, does not involve i)

va_start(objects_list, objects);
for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++) {
  objectsInArray[i] = o;
}
va_end(objects_list);

我在Array subscript is not an integer行收到objectsInArray[i] = o;错误。 objectsInArray被声明为id *objectsInArray

iint,为什么我会收到此错误,我该如何解决此问题?提前谢谢。

3 个答案:

答案 0 :(得分:4)

i在for循环中的类型为id。要解决模糊语法,请在id o语句之外声明for(...)

在Xcode中,在项目设置下,启用“隐藏局部变量”的警告,以便编译器发出警告。否则,使用gcc时,请使用-Wshadow

答案 1 :(得分:2)

不,您已经创建了i类型为id的新{{1}}。不幸的是,没有办法在for循环中进行“混合模式”初始化。

答案 2 :(得分:1)

for (id o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++)

包含声明

id o = objects, i = 0;

表示i不是int,而是id。在循环之前声明o

id o;
for (o = objects, i = 0; o != nil; o = va_arg(objects_list, id), i++)