2015-08-11 4 views
-1

Как я планирую сделать небольшую игру, чтобы проверить себя на том, что я знаю до сих пор на C++, я обнаружил, что использование этого дает мне ошибку в местоположении «else» ». Может ли кто-нибудь помочь?Ошибка: ожидаемое заявление/C++/Visual Studio

int lvlup() 
{ 
    if (user.xp >= user.maxxp) 
     user.xp = 0; 
     user.maxxp + 10; 
     user.maxhealth += user.maxhealth * .5; 
     user.defense + 2; 
     user.attack + 3; 
     user.lvl + 1; 
    else 
     return 0; 
}; 
+0

Эта функция является методом класса? Что такое 'user'? Кроме того, если вы входите в оператор 'if', то нет инструкции' return'. Кроме того, у вас есть множество операторов, которые используют '+' вместо (то, что я предполагаю, должно быть '+ =', поэтому они фактически ничего не делают – CoryKramer

+1

'{{{{}}}}}' отбирайте отсюда! –

ответ

1

Вы должны заявления группы с {} в C++, и вам не нужно ; после функции.

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

Я предполагаю, что возвращаемое значение будет ли пользователь выровнен, так что действительно должно быть bool, а не int. Я добавил оператор возврата к истинному блоку if. В зависимости от использования lvlup, который может быть или не иметь смысла. Если возвращаемое значение не используется, его не должно быть и использовать void.

Так что ваш код должен быть:

int lvlup() 
{ 
    if (user.xp >= user.maxxp) 
    { 
     user.xp = 0; 
     user.maxxp += 10; 
     user.maxhealth += user.maxhealth * .5; 
     user.defense += 2; 
     user.attack += 3; 
     user.lvl += 1; 

     return 1; 
    } 
    else 
     return 0; 
} 

Если if/else оператор имеет только одну строку, вы можете выбрать, чтобы не иметь никаких брекетов, но если есть более чем одна строка должна быть выполнена в ответ на условный вам нужно включить их. Однако не включая их можно открыть возможность для кого-то, поддерживающего код, совершить ошибку и не вставлять их при добавлении строки в блок, поэтому некоторые люди всегда добавляют их.

+0

True @CoryKramer, но это ответ на главный вопрос. –

+0

@CoryKramer, добавил возврат, но я уже обратился к 'user'. Я предполагаю, что это глобальный, который является yucky, но законным. –

0

Вам нужны скобки {}. На самом деле, если бранч и цикл for выполняют только следующую строку, если скобки не найдены вокруг фрагмента кода. пример:

a = 1; 
if (a == 0) 
    std::cout << "This line is skipped" << endl; 
    std::cout << "This line will appear" << endl; 

Если выполнить этот код, то выход будет:

This line will appear 

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

и если вы записать некоторые скобки, чтобы структурировать ваш код, как показано ниже:

a = 0; 
if (a == 0) { 
    std::cout << "This line is not skipped" << endl; 
    std::cout << "This line will appear too" << endl; 
} 

выход будет:

This line is not skipped 
This line will appear too 

для цикла не только петля единственной линии рядом с для цикла, если нет скобок найдены тоже.

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