Причина вашей ошибки в том, что ваши скобки находятся в неправильных местах. &
, о котором компилятор жалуется, это за пределами условное выражение инструкции if
.
Компилятор видит это как условие для тестирования:
if(isalpha(checkcode.at(0)))
Оставшаяся часть считается утверждение выполнить, когда условие истинно:
&(isalpha(checkcode.at(1)))...
Таким образом, компилятор правильно , Когда он видит оператора унарный&
, он ожидает, что операнд будет тем, что он может принять адрес, например, lvalue или функцию.
Тщательное считывание сообщений об ошибках и кода поможет вам найти такую ошибку в следующий раз. (То есть, когда компилятор жалуется на отсутствующий «идентификатор lvalue или функции», спросите себя, что бы это заставило его ожидать такого, в первую очередь. Оно хочет тех, когда оно принимает адрес чего-то, поэтому подумайте, почему он это считает должен брать адрес чего-либо. Он делает это с унарным оператором &
, но вы должны иметь двоичный оператор, поэтому внимательно посмотрите на код, чтобы определить, почему он не интерпретируется как двоичный оператор. Вы знаете синтаксис C++, поэтому вы знаете, что инструкции if
должны быть полностью, окруженные в круглых скобках, и поэтому вы знаете, что только условие является частью первого выражения. Это не то, что вы намеревались, так что вы поймете, что закрывающая скобка ошибочна место.)
Как бы то ни было, оператор single-ampersand &
не то, что вы должны использовать для булевых выражений. Вместо этого вы должны использовать &&
. Это различие не привело бы к ошибке, которую вы видели, и это не окажет заметного влияния на поведение вашего кода во время выполнения.
Вы не имеете в виду '&&' not '&'? –
Пожалуйста, привыкните копировать и вставлять сообщения компилятора, а не переписывать их самостоятельно. Таким образом, вы правильно получите * lvalue * вместо * Ivalue *. Это нижний регистр el, а не капитал i. –