2009-12-07 6 views
-1

У меня есть метод, который генерирует и вызывает ошибку, которую ожидал int, но найденный логически, но когда я переключу его на логическое, он говорит ту же ошибку, но обращает int и boolean. Вот мой код:int и boolean error

private void compileDeclaration(boolean isGlobal) { 
     if (equals(theToken, "int")) { 
      accept("int"); 
      String ident = theToken; 
      if (!isIdent(theToken)) t.error("expected identifier, got " + theToken); 
      else if (isGlobal){ 
       symTable.allocVar(ident, isGlobal); 
      } 

      if (!isGlobal) cs.emit(Machine.ALLOC, symTable.stackFrameSize()); 
      //dprint("declaring int " + ident); 
      theToken = t.token(); 
      accept (";"); 
     } else if (equals (theToken, "final")) { 
      accept("final"); 
      accept("int"); 
      String ident = theToken; 
      if (!isIdent(theToken)) t.error("expected identifier, got " + theToken); 
      theToken = t.token(); 
      accept("="); 
      int numvalue = new Integer(theToken).intValue(); 
      if (!isNumber(theToken)) t.error("expected number, got " + theToken); 
      else if (numvalue = 0) { **//This is where it highlights my error** 
       symTable.allocConst(ident, numvalue); 
      } 

Любая помощь была бы очень признательна.

+0

на каком языке это? – ysth

+0

Хорошо, что вы показываете код, вам просто нужно показать сообщение об ошибке, и это будет легче обнаружить. Я думаю, что у Филлипа Нгана есть правильный ответ, вы должны принять его как принято. – OscarRyz

ответ

8

Линия

else if (numvalue = 0) { **//This is where it highlights my error** 

отсутствует символ равенства, т.е.

else if (numvalue == 0) { **//This is where it highlights my error** 
+0

И для объяснения проблемы: «numvalue = 0» требует numvalue как int (или long), так что 0 может быть присвоено ему, следовательно, «int expected». Однако оператор if хочет иметь логическое выражение, а присваивания не являются булевыми выражениями, поэтому «bool expected» - две разные ошибки, вызванные отсутствующим =. Если бы это был C/C++, вам было бы очень весело с этим :-) –

+0

Я согласен с тем, что C++ даст вам хороший ход! Спасибо за объяснение –

1

Скорее всего, вы вызываете его в двух разных местах, один раз с целым числом и один раз с булевым.

Либо это или symTable.allocVar() ожидает int.

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