• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

error 021: symbol already defined: "fmt_string"

bereg101

Умник
Первый вопрос:
Почему возникает ошибка, в условии else, если в любом случае, как я понимаю, сработает только одно условие или if или else и fmt_string определится только 1 раз.
(42288) : error 021: symbol already defined: "fmt_string"
(42289) : error 021: symbol already defined: "str"
Код с ошибкой. Ошибка в else
Код:
    if(AdminInfo[params[0]][aLevel] < 1)
    {
        makeAdmin(playerid, params[0], params[1], 0);
        static const fmt_string[] = "[A] %s выдал игроку %s права администратора %i-го уровня";
        new str[sizeof(fmt_string)+2+MAX_PLAYER_NAME+4+32];
        format(str, sizeof(str), fmt_string,PlayerInfo[playerid][pSendername],PlayerInfo[params[0]][pSendername],params[1]);

        SendAdminMessage(CGREY,str);
        SendClientMessage(params[0],CGREY,str);
        SendClientMessage(params[0],CYELLOW,"Вы назначены администратором. Команды администратора: /ah");
    }
    else
    {
        AdminInfo[params[0]][aLevel] = params[1];
        saveAdmin(playerid);

        static const fmt_string[] = "[A] %s изменил уровень права доступа администратора %s на %i-й уровень"; // ошибка возникает тут
        new str[sizeof(fmt_string)+2+MAX_PLAYER_NAME+4+32]; // и тут
        format(str, sizeof(str), fmt_string,PlayerInfo[playerid][pSendername],PlayerInfo[params[0]][pSendername],params[1]);

        SendAdminMessage(CGREY,str);

        static const fmt_string[] = "[A] Администратор %s изменил вам уровень права доступа администратора на %i-й уровень";
        new str[sizeof(fmt_string)+2+MAX_PLAYER_NAME+4+32];
        format(str, sizeof(str), fmt_string,PlayerInfo[playerid][pSendername],PlayerInfo[params[0]][pSendername],params[1]);
        SendClientInfoMessage(playerid, str);
    }

И 2й вопрос:
Почему часто используют такую конструкцию?
Код:
static const fmt_string[] = "какой то тпекст %s"
new str[sizeof(fmt_string)+2+MAX_PLAYER_NAME+4+32];
format(str, sizeof(str), fmt_string, someVar)
А не что-то типа:
Код:
new string[300];
format(string, sizeof(string), "Какой то текст %s", someVar);
 
Сверху Снизу