Индекс массива не является целым числом - PullRequest
1 голос
/ 27 марта 2011
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, так почему я получаю эту ошибку и как я могу это исправить?Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

i имеет тип id внутри цикла for. Чтобы разрешить неоднозначный синтаксис, объявите id o вне оператора for(...).

В Xcode, в настройках проекта, включите предупреждения для «Скрытых локальных переменных», чтобы компилятор предупреждал о таких вещах. В противном случае при использовании gcc используйте -Wshadow.

2 голосов
/ 27 марта 2011

Нет, вы создали новый i типа id.К сожалению, в цикле for невозможно выполнить инициализацию «смешанного режима».

1 голос
/ 27 марта 2011
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++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...