Использование результата задания как условие без круглых скобок
У меня это внутри пользовательского класса UIActionSheet
if (otherButtonTitles != nil) {
[self addButtonWithTitle:otherButtonTitles];
va_list args;
va_start(args, otherButtonTitles);
NSString * title = nil;
while(title = va_arg(args,NSString*)) { // error here
[self addButtonWithTitle:title];
}
va_end(args);
}
У меня есть эта ошибка
! используя результат задания как условие без круглых скобок
указывающий на эту строку
while(title = va_arg(args,NSString*)) {
почему?
спасибо.
Ответы
Ответ 1
Это, вероятно, не ошибка, как вы сказали, это предупреждение.
Компилятор предупреждает вас, что вы должны окружать назначения в круглых скобках, когда он находится в пределах условного условия, чтобы избежать ошибки ol < присваивания-когда-вы-среднего сравнения.
Чтобы пройти мимо этого довольно педантичного предупреждения компилятора, вы можете просто окружить назначение в другой паре круглых скобок:
while((title = va_arg(args,NSString*))) {
//...
}
Ответ 2
Это должно быть предупреждение, а не ошибка. Он пытается предупредить, если вы используете =
, но вы имели в виду ==
.
В этом случае вы не имеете в виду использовать ==
, потому что вы вызываете va_arg()
несколько раз, чтобы выполнить итерацию через otherButtonTitles
и назначив его temp var title
, поэтому просто добавьте еще один набор круглые скобки. Предупреждение исчезнет.
while((title = va_arg(args,NSString*))) {
Ответ 3
Компилятор считает, что вы выполняете присвоение по ошибке, следовательно, предлагая эту ошибку. Вы должны обернуть свое утверждение в ONE MORE PAIR круглых скобок следующим образом:
while((title = va_arg(args,NSString*)))
Затем компилятор сначала оценит назначение, тогда результат этого присваивания будет передан в условие while
Ответ 4
Это кажется немного придирчивым, но вы пробовали:
while((title = va_arg(args,NSString*)) != NULL)
?