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
。
i
是int
,为什么我会收到此错误,我该如何解决此问题?提前谢谢。
答案 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++)