2015-10-20 2 views
0

Следующее утверждение дает мне компилятор ошибки как сюрприз для меня:почему я не могу сделать такое определение переменной, если условие

BaseClass& base; 

if (((const AClass*) ptr = dynamic_cast<const AClass*> (&base)) != NULL) 
{ 
    ... 
} 

GCC 4.1.2 говорит PTR не определяется как ошибка. Однако обычная дефиниция и назначение будут работать. Такие, как

if (const int* ptr = f()) 

Так что же заставляет его не работать над вышеуказанным сегментом кода?

Нет, это не дублирование другой темы, поскольку я указал на простой корпус, но не на такой случай. Если вы считаете, что это дублирование, вы можете хотя бы указать, почему выше не работает.

+0

Возможный дубликат [Объявление и инициализация переменной в условном или контрольном выражении в C++] (http://stackoverflow.com/questions/1516919/declaring-and-initializing-a-variable-in-a-conditional- или-control-statement-in-c) – Rostislav

+1

Возможно, вы имели в виду 'if (const AClass * ptr = dynamic_cast (& base))' –

+0

@MM Пробовал все такие варианты, но все равно такую ​​же ошибку. –

ответ

1

Этот

(const AClass*) ptr 

является бросание ptr к типу const AClass*, а не декларация. Если вы еще не объявили ptr, вы получите указанную вами ошибку.

+1

Если вы уже объявили 'ptr', это все равно ошибка, потому что результат приведения - это значение rvalue, которому нельзя назначить. –

+0

@ M.M хороший пункт. Ваш комментарий, похоже, означает, что означает OP. – Adam

Смежные вопросы