Я сталкивался с этой ошибкой: «Символ« pa »не может быть разрешен» одним из моих методов.
Код:
PredefinedAtom* PredefinedSymbolTableCollection::findAtomByLexCode(u_int lex_code) {
// PredefinedAtom* pa; // <== ACCEPTED
for(u_int i = 0; i < pst.size(); i++) {
if((PredefinedAtom* pa = pst[i]->findAtomByLexCode(i)) != NULL){// <== BAD
// some code
}
}
}
Если я объявляю тип PredefinedAtom вне области действия if, код компилируется / запускается. Однако, если я попытаюсь объявить тип внутри ‘if’, компилятор выдаст ошибку ‘Cannot решить’ pa ‘symbol’. ‘findAtomByLexCode’ либо возвращает указатель на ‘PredefinedAtom *’, либо NULL.
Вы можете определить переменную в состоянии if
заявление, но вы не можете определить его в выражении. Вам нужно написать это так:
if (PredefinedAtom* pa = pst[i]->findAtomByLexCode(i)) {
...
}
Значение pa
преобразуется в bool
определить, какая ветвь берется.
Других решений пока нет …