Ошибки компиляции - PullRequest
       0

Ошибки компиляции

0 голосов
/ 16 июля 2010

Я пытаюсь скомпилировать, но я получаю следующие ошибки:

1>.\item.cpp(123) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)

1>.\commands.cpp(1372) : error C2057: expected constant expression
1>.\commands.cpp(1372) : error C2466: cannot allocate an array of constant size 0
1>.\commands.cpp(1372) : error C2133: 'buffer' : unknown size

Строка 123 item.cpp

if((bool)random_range(0, 1))

Строка 1372 commands.cpp

if(money < changeSexPrice)
{
char buffer[70 + changeSexPrice];
sprintf(buffer, "You do not have enough money. You need %d gold coins to change your sex.", changeSexPrice);
player->sendCancel(buffer);
return false;
}

есть идеи?

Ответы [ 3 ]

2 голосов
/ 16 июля 2010

Ваша проблема char buffer[70 + changeSexPrice];.Компиляторам win32 требуется постоянное выражение при распределении стека.

Я не уверен, почему вы добавляете changeSexPrice, поскольку вы используете только буфер для печати int.Бьюсь об заклад, если вы выберете что-то вроде char buffer[1024], то вам будет более чем достаточно для ваших нужд.

РЕДАКТИРОВАТЬ: За комментарии (что очень хорошо).

Если вы используете буфер фиксированного размера len 1024, используйте snprintf.В случае Visual Studio это sprintf_s .Ваш код изменится на:

sprintf_s(buffer, 1024, "You don't have enough money ...", yourValueHere);

В качестве альтернативы, Отметка B представляет ответ , который также устраняет необходимость в вашем собственном распределении памяти.

1 голос
/ 16 июля 2010

Объявление массивов на основе стека переменной длины является расширением gcc (и, возможно, и другими).Используйте ostringstream для форматирования:

if(money < changeSexPrice)
{
    std::ostringstream os;
    os << "You do not have enough money. You need " << changeSexPrice << " gold coins to change your sex.";
    player->sendCancel(os.str().c_str());   // This assumes that sendCancel doesn't take ownership of its parameter.
    return false;
}
0 голосов
/ 16 июля 2010
if((bool)random_range(0, 1))

Лучше напишите что-то вроде:

if(random_range(0, 1) == 1)

Это будет понятнее, и предупреждение исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...