Как исправить ошибку pawn

Список часто встречаемых ошибок в pawno

Данная тема содержет наиболее распространенные ошибки и предупреждения в pawno при создании скриптов sa-mp
Когда компилятор находит ошибку в файле, то выводится сообщение, в таком порядке:

  • Имя файла
  • номер строки компилятора были обнаружены ошибки в скобках, непосредственно за именем
  • класс error (ошибка, фатальная ошибка или предупреждение)
  • номер ошибки
  • описание ошибки

Например:

hello.pwn(3) : error 001: expected token: ";", but found "{"

Примечание: эта ошибка может быть на линии, над линией, что показано, так как компилятор не всегда может установить ошибку перед проанализировав полное выражение.

Категории ошибок

Ошибки разделяются на три класса:

Ошибки (errors)

  • Описание ситуации когда компилятор не может скомпилировать код
  • Ошибки номеруются от 1 до 99

Критические ошибки (Fatal errors)

  • Критические ошибки и описание, от которых компилятор не может восстановиться.
  • Парсинг прерывается (нет отклика программы).
  • Критические ошибки номеруются от 100 до 199.

Предупреждения ( Warings )

  • Предупреждения указывают на возможную причину возникновения багов, вылетов.
  • Предупреждения номеруются от 200 до 299.

Распространенные ошибки

001: expected token (ожидаемый знак)
Обязательный знак отсутствует

Пример:

error 001: expected token: ";", but found "return"
main()
{
    print("test") // тут должна быть точка с запятой ";"
    return 1;
}

002: only a single statement (or expression) can follow each “case” (только одно выражение может быть в одной строке с “case”
В каждом case оператора switch без фигурных скобок может содержаться только один оператор если больше нужно ставить скобки.
Пример:

error 002: only a single statement (or expression) can follow each "case"

main()
{
    switch(x)
    {
        case 0: print("hello"); print("hello");
    }
    return 1;
}

Так же могут быть еще и предупреждения и дополнительные ошибки:

error 002: only a single statement (or expression) can follow each "case"
warning 215: expression has no effect
error 010: invalid function or declaration

Вот так это можно исправить:

main()
{
    switch(x)
    {
        case 0:
        {
            print("hello");
            print("hello");
        }
    }
    return 1;
}

004: function “x” is not implemented (Функция “x” не используется
Часто бывает что в функции выше пропущена скобка.

025: function heading differs from prototype
Это проиходит когда в функции не совпадают аргументы.

К примеру:

forward MyFunction(playerid);
public MyFunction(player, vehicleid);

Исправляем:

forward MyFunction(playerid, vehicleid);
public MyFunction(playerid, vehicleid);

035: argument type mismatch (argument x) (не совпадение типов аргумента(ов)
К примеру когда в место playerid – integer аргумента стоит “playerid” – string или 0.5 – float

Пример:

error 035: argument type mismatch (argument 1)

Kick("playerid"); // Как видите в место целого числа (integer) стоит строка

Исправляем:

Kick(playerid);

046: unknown array size (variable x)
Не указан размер массива.

Пример:

new string[];
string = "pawno";

Исправляем:

new string[6];
string = "pawno";

047: array sizes do not match, or destination array is too small
Размер массива мал или не совпадает.

  • Многомерные массивы должны иметь одинаковый размер
  • Одномерные массив к которому присваивают(правый должен иметь больше размер чем левый.
new destination[8];
new msg[] = "Hello World!";
 
destination = msg;

В приведенном выше коде размер строки “Hello world!” ровна 12 байт а массив к которому присваиваем имеет размер 8 байт из этого и складывается ошибка.
Если увеличить размер массива destination до 13 байт то ошибка исправится.

new destination[13];
new msg[] = "Hello World!";
destination = msg;

055: start of function body without function header
Начало тела функции без функции заголовка.

Критические ошибки (FATAL ERRORS)

100: cannot read from file: "<file>"

Компилятор не может найти или прочитать указанный файл, убедитесь что он находится по адресу (<папка с сервером>pawnoinclude).
Пример:

#include <a_sam>

Исправляем:

#include <a_samp>

Совет
Изображение Не нужно открывать ваш код дважды, не нужно тыкать несколько раз на файл. Откройте сначала редактор, потом ваш проект.

Предупреждения( Warnings )

202: number of arguments does not match definition
Описание ошибки довольно понятное, это значит что вы используете слишком мало или слишком много аргументов в функции, обычно это признак того что функция используется не правильно, обратитесь к документации.
Функция GetPlayerHealth согласно официальному источнику wiki.sa-mp.com имеет два аргумента playerid и Float:health ссылка

Пример:

GetPlayerHealth(playerid);

Исправляем:

new Float:health;
GetPlayerHealth(playerid, health);

203: symbol is never used: “symbol”
Вы создали переменную или функцию и она ни где не используется тогда ищите в окне компилятора это предупреждение, это не как не влияет на код и не угражает ему, так что если вы удалите переменную или функцию которая не используется, то вы сэкономите память.

Пример:

stock SomeFunction()
{
    // Blah
}

204: symbol is assigned a value that is never used: “symbol”
Это предупреждение аналогично к предыдущему, разница в том что к переменной что то присвоено и оно не как не используется, это безопасно 🙂

209: function should return a value
Функция ничего не возвращает, вы создали её:

SomeFunction()
{
     // Blah
}

Решили её присвоить к чему нибудь к примеру:

new result = SomeFunction(); // ожидает 1

Вот так исправить

SomeFunction()
{
     // Blah
     return 1;
}

211: possibly unintended assignment
Если вы введете оператор присваивания в условии и оно не будет в круглых скобках то будет предупреждение

if(vehicle = GetPlayerVehicleID(playerid)) // ошибка
if(vehicle == GetPlayerVehicleID(playerid)) // все норм
if((vehicle = GetPlayerVehicleID(playerid))) // все норм, так значение функции присвоится к переменной потом выражение вычесляется { то есть это как if(IsPlayerConnected(playerid)}

213: tag mismatch ( несовпадение тегов)
Это происходит когда:

  • Тип переменной указан не верно или не имеет его
  • Выражения по обе стороны бинарного оператора имеют разные теги
  • В пременную возвращен не верный тип переменной или не имеющий его.
  • Индексирование массива, который требует тегами индекс без тега или неправильное имя тега

Часто это бывает на 3d текстах или тексдравах Text3D, Text

Не правильно:

new health;
GetPlayerHealth(playerid, health);

Правильно:

new Float:health;
GetPlayerHealth(playerid, health);

217: loose indentation
Компилятор выдаст ошибку если не соблюдены отступы.

Правильно:

if(condition)
{
    action();
    result();
}

Не правильно:

if(condition)
{
    action();
  result();
}

Отступы делаются по нажатью кнопки TAB это практика в программировании для удобного чтения кода.

219: local variable “foo” shadows a variable at a preceding level
Локальная переменная в тени глобальной то есть над локальной переменной создана точно такая же глобальная. В практике программирования префиксом глобальной переменной является “g” в начале переменной к примеру

new gPlayerMoney

любыми способами избегайте их.

К примеру:

new team[MAX_PLAYERS]; // объявляем глобальную переменную
 
function(playerid)
{
    new team[MAX_PLAYERS]; // создаем еще одну, и получаем статью 219 кодекса ошибок :D
    team[playerid] = random(5); 
}

Решение:
Просто переименуйте локальную переменную team.

225: unreachable code ( недоступный код )
Это происходит тогда когда вы пишите какой нибудь код после return, после return’а код не выполняется и он считается бесполезным

Пример:

#include <zcmd.inc>

CMD:jetpack(playerid, params[])
{
	#pragma unused params
	if(IsPlayerAdmin(playerid))
	{
	    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
	    return 1; // завершаем процесс
	}
	else
	{
	    SendClientMessage(playerid, -1, "Вы не администратор");
	    return 1; // завершаем процесс
	}
	SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // Этот код не доступен он не будет выполнятся.
}

Решение:

CMD:jetpack(playerid, params[])
{
	#pragma unused params
	if(IsPlayerAdmin(playerid))
	{
	    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
	}
	else
	{
	    SendClientMessage(playerid, -1, "Вы не администратор");
	}
	SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // этот код запустится
	return 1; // завершаем процесс
}

235: public function lacks forward declaration (symbol “symbol”)
Отсутствует forward.

Не правильно:

public MyFunction()
{

}

Правильно:

forward MyFunction();
 
public MyFunction()
{

}

Надеюсь эта статья поможет вам в языке программирования, желаю вам не повторять ошибок дважды и что бы ваш код был быстрым, надежным!
Оставляйте ваши отзывы, ставьте плюсы, пишите недостатки ошибки, недостатки статьи или их недочеты. Удачи в мире PAWNO!

error 001: expected token: "%s", but found "%s" - ожидался символ: "%s", но был найден "%s";
error 002: only a single statement (or expression) can follow each "case" - только одно заявление (или выражение) могут следовать за "case";
error 003: declaration of a local variable must appear in a compound block - объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function "%s" is not implemented - функция %s не реализована;
error 005: function may not have arguments - функция не имеет аргументов;
error 006: must be assigned to an array - должен быть присвоен массив;
error 007: operator cannot be redefined - оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero - должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) - неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration - неизвестная функция или декларация;
error 011: invalid outside functions - неверно вне функции;
error 012: invalid function call, not a valid address - неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) - нет точки входа (не public функция);
error 014: invalid statement; not in switch - неверный оператор; не в switch;
error 015: "default" case must be the last case in switch statement - "default" должен быть последним условием в switch;
error 016: multiple defaults in "switch" - несколько "default" в switch;
error 017: undefined symbol "%s" - неизвестный символ "%s";
error 018: initialization data exceeds declared size - данные массива превышают его размер;
error 019: not a label: %s" - не метка "%s";
error 020: invalid symbol name "%s" - неверное имя символа "%s";
error 021: symbol already defined: %s" - символ уже объявлен: "%s";
error 022: must be lvalue (non-constant) - должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment - назначение массива должно быть простым;
error 024: "break" or "continue" is out of context - "break" или "continue" вне контекста;
error 025: function heading differs from prototype - функция заголовка отличается от прототипа;
error 026: no matching "#if..." - не найдено "#if...";
error 027: invalid character constant - недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): "%s" - неверный индекс (это не массив или слишком много индексов): "%s";
error 029: invalid expression, assumed zero - неверное выражение, нет результата;
error 030: compound statement not closed at the end of file - составной оператор не закрыт в конце файла;
error 031: unknown directive - неизвестная директива;
error 032: array index out of bounds (variable "%s") - индекс массива превышен;
error 033: array must be indexed (variable "%s") - массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) - аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) - несоответствие типа аргумента (аргумент %d);
error 036: empty statement - пустой оператор;
error 037: invalid string (possibly non-terminated string) - неправильная строка;
error 038: extra characters on line - лишние символы в строке;
error 039: constant symbol has no size - символьная константа не имеет размера;
error 040: duplicate "case" label (value %d) - несколько раз объявлен "case" с одним тем же параметром;
error 041: invalid ellipsis, array size is not known - размер массива неизвестен;
error 042: invalid combination of class specifiers - недопустимое сочетание класса;
error 043: character constant exceeds range for packed string - символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters - позиционные параметры должны предшествовать всем именованным параметрам;
error 045: too many function arguments - слишком много аргументов у функции;
error 046: unknown array size (variable "%s") - неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small - размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match - размеры массива не совпадают;
error 049: invalid line continuation - неправильное продолжение строки;
error 050: invalid range - неверный диапазон;
error 051: invalid subscript, use "[ ]" operators on major dimensions - неправильный индекс, используйте "[]";
error 052: multi-dimensional arrays must be fully initialized - много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions - превышение максимального числа измерений;
error 054: unmatched closing brace - не найдена закрывающаяся скобка;
error 055: start of function body without function header - начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable "%s") - массивы, локальные переменные и аргументы функции не могут быть общедоступными;
error 057: unfinished expression before compiler directive - незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice - дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable "%s") - аргумент не может иметь значение по-умолчанию;
error 060: multiple "#else" directives between "#if ... #endif" - Несколько "#else" между "#if ... #endif" - несколько "#else" между "#if и #endif";
error 061: "#elseif" directive follows an "#else" directive - "#else" перед "#elseif";
error 062: number of operands does not fit the operator - количество операндов не соответствует оператору;
error 063: function result tag of operator "%s" must be "%s" - Результат функции %s должен быть %s;
error 064: cannot change predefined operators - невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) - в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument "%s") - аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable "%s") - Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma - неверное число в #pragma;
error 069: rational number format already defined - формат рационального числа уже определен;
error 070: rational number support was not enabled - рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function "%s") - объявленный оператор должен быть перед использованием;
error 072: "sizeof" operator is invalid on "function" symbols - оператор "sizeof" не может быть использован для символов функции;
error 073: function argument must be an array (argument "%s") - аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character - #define должен начинаться с буквы;
error 075: input line too long (after substitutions - введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call - неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s - плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both "return" and "return <value>" - функция использует "return" и "return <значение>";
error 079: inconsistent return types (array & non-array) - несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol "%s") - неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol "%s") - не может принимать тег в качестве значения по умолчанию для параметра индексированного массива;
error 082: user-defined operators and native functions may not have states - созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol "%s") - функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol "%s") - конфликт состояния: одно из состояний уже назначено на другую реализацию;
error 085: no states are defined for function "%s" - нет состояний, определенных для функции "%s";
error 086: unknown automaton "%s" - неизвестная автоматизация "%s";
error 087: unknown state "%s" for automaton "%s" - неизвестное состояние "%s" в автоматизации "%s";
error 088: number of arguments does not match definition - количество аргументов не совпадает с объявленными в функции;

Ошибка: error 001: expected token: “;”, but found “]”(пример)

Решение: Идём на строку выше той, что указана в ошибке и ставим в конце: ;

Ошибка: error 021: symbol already defined: “понятно в общем” или warning 219: local variable “тоже” shadows a variable at a preceding level

Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную, stock, public.Для решения вам просто требуется удалить дубликат.

Ошибка: error 024: “break” or “continue” is out of context

Решение: break, continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно заменить их.

Ошибка: error 032: array index out of bounds (variable “cartek”)

Решение: Ошибка появляется, если у вас превышен индекс массива. Для решения вам просто надо увеличить число в создании массива.

Ошибка: error 040: duplicate “case” label (value %d)

Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.

Ошибка: fatal error 100: cannot read from file: “понятно”

Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.

Ошибка: warning 203: symbol is never used: “гы”

Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.

Ошибка: warning 209: function “ясно” should return a value

Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.

Ошибка: warning 217: loose indentation

Решение: Для решения проблемы выровняйте строки.

Ошибка: warning 235: public function lacks forward declaration (symbol “ясно”)

Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.

Ошибка: fatal error 107: too many error messages on one line

Решение: Исправьте ошибки, которые даны выше, в частности в 1 строке. Именно поэтому выходит такая ошибка.

Ошибка: fatal error 100: cannot read from file: “%s”

Решение: Возможно вы удалили какую-то строку/файл, которую нужно добавить и проблема будет решена, вместо %s вам будет дана это строка/файл. Насколько я помню

Автор: Transcend
Тему можно дополнять!

Ошибка: error 001: expected token: “;”, but found “бла-бла”

Решение: Идём на строку выше той, что указана в ошибке и ставим в конце ; (точку с запятой).

Ошибка: error 021: symbol already defined: “бла-бла” или warning 219: local variable “бла-бла” shadows a variable at a preceding level

Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную,stock,public.Для решения вам просто требуется удалить дубликат.

Ошибка: error 024: “break” or “continue” is out of context

Решение: break,continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно просто заменить их.

Ошибка: error 032: array index out of bounds (variable “cartek”)

Решение: Ошибка появляется, если у вас превышен индекс массива. Для решение вам просто надо увеличить ‘число’ в создании массива.

Ошибка: error 040: duplicate “case” label (value %d)

Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.

 

Ошибка: fatal error 100: cannot read from file: “бла-бла”

Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.

Ошибка: warning 203: symbol is never used: “бла-бла”

Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.

Ошибка: warning 209: function “бла-бла” should return a value

Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.

Ошибка: warning 217: loose indentation

Решение: Для решения проблемы выровняйте строки.

Ошибка: warning 235: public function lacks forward declaration (symbol “бла-бла”)

Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.

По мере возможности тема будет дополняться

Введения
1.YSI использует много макросов, чтобы сделать вещи проще вам нужно послушать меня.Недостатком является то, что возникает много ошибок и предупреждения очень трудных. Этот “Мануал” должен помочь вам исправить данные ошибки .
КОД:

Код:

// Alternate:
//CMD:kickplayer(playerid, params[])
YCMD:kickplayer(playerid, params[], help) // Warning line.
{
    // Some code here.
}

ПРОБЛЕМА

Код:

<path>errors.pwn(11) : warning 203: symbol is never used: "kickplayer"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

Решение
Вы не создали include “YSIy_commands”.

Код:

#include <YSIy_commands>

2.
КОД

Код:

timer X() // Error line.
{
}

ПРОБЛЕМА

Код:

<path>errors.pwn(3) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

РЕШЕНИЯ

Это недопустимое заявление – нет никакой задержки, заданного таймера.

3.
КОД

Код:

X[100]() // Error line.
{
}

ПРОБЛЕМА

Код:

<path>errors.pwn(3) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Очень похожая проблема до последнего, только на этот раз отсутствует параметр “Таймер” ключевое слово вместо времени.
РЕШЕНИЯ

4.
КОД

Код:

timer X[100](arr[]) // Error line.
{
}

ПРОБЛЕМА

Код:

<path>errors.pwn(3) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

РЕШЕНИЯ
Вы имеете право синтаксиса как с “timer” времени, но вы все равно получите недопустимое заявление. На самом деле это еще одна похожая ошибка . Все массивы на “timer”, “global” и функции “remotefunc” должны следовать их длине. Строки НЕ нужно в длину, но вместо этого должен быть объявлен как “string:”, в противном случае компилятор не может различить эти два понятия.

Код:

timer X[100](arr[], size)
{
}

Или же

Код:

timer X[100](string:arr[])
{
}

5.
КОД

Код:

main()
{
    new
        Iterator:x<100>; // Warning line.
    foreach (new i : x)
    {
    }
}

ПРОБЛЕМА

Код:

<path>errors.pwn(6) : warning 203: symbol is never used: "x@YSII_Cg"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

РЕШЕНИЯ
Это является одним из более мения,страшным предупреждающих сообщений.
Массив данных называется “<name> @ YSII_Ag”, а переменная величина называется “<name> @ YSII_Cg”. Если вы получите предупреждение о том, что переменный размер никогда не используется, это означает, что размер не изменяли.
Если это так, то итератор всегда пуст
Если вы получите сообщение, что “<name> @ YSII_Ag” (массив данных) также никогда не используется, то итератор никогда не используется вообще, даже в “foreach” цикла.

Код:

main()
{
    new
        Iterator:x<100>;
    Iter_Add(x, 10);
    foreach (new i : x)
    {
    }
}

6.
КОД

Код:

main()
{
    new
        Iterator:x<100>;
    Iter_Add(x, 10);
    foreach (i : x) // Error line.
    {
    }
}

ПРОБЛЕМА

Код:

<path>errors.pwn(7) : error 017: undefined symbol "i"
<path>errors.pwn(7) : warning 206: redundant test: constant expression is non-zero
<path>errors.pwn(7) : error 017: undefined symbol "i"
<path>errors.pwn(7) : warning 221: label name "_Y_ITER_C0" shadows tag name
<path>errors.pwn(7) : warning 225: unreachable code
<path>errors.pwn(7) : error 017: undefined symbol "i"
<path>errors.pwn(7) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.

РЕШЕНИЯ
Здесь только первая ошибка-это главное, что все другие вызваны первой. Они могут быть в заблуждение, так как они предоставляют “y_iterate”, надо просто не игнорировать их, а и исправить первую ошибку

Код:

main()
{
    new
        Iterator:x<100>;
    Iter_Add(x, 10);
    foreach (new i : x)
    {
    }
}

7.
ПРОБЛЕМА
Компилятор висит.
РЕШЕНИЯ
Существует ряд причин этому, обычно макрос расширяется слишком много кода. Если у вас есть “foreign”, “global”, “remotefunc” или “timer” такая статья, которая очень большая, подобно:

Код:

timer MyTimer[1000](playerid, string:str[], arr[], size, string:other[], string:final[])
{
}

Приведенный выше код БУДЕТ висеть компилятор. Само по себе это не длинная строка – очень короткая относительно 511 символов максимум, но, как мы знаеем ранее YSI использует много макросов и это расширяет длинный код (эффективное, но долго). Проблема на промежуточных стадиях – код расширяется очень, делаеться очень длинный код, а затем сокращаеться . Попробуйте сократить линию.

Код:

timer MyTimer[1000](p,string:s[],a[],c,string:o[],string:f[])
{
}

Если компилятор по-прежнему висит (и вы убедились, что функция-это проблема, перепробывав все остальные), то вам, возможно, придется прибегнуть к использованию альтернативных методов, таких как basic.Код, сгенерированный “foreign” и “global” настолько велик, что он должен был быть разделен на две части – следовательно, почему эти две ключевые слова были сделаны, чтобы отразить “forward” и “public”
8.
КОД

Код:

main()
{
    inline Func(arr[]) // Error line.
    {
    }
}

ПРОБЛЕМА

Код:

<path>errors.pwn(7) : error 009: invalid array size (negative, zero or out of bounds)
<path>errors.pwn(7) : error 001: expected token: ")", but found ";"
<path>errors.pwn(7) : error 036: empty statement
<path>errors.pwn(7) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.

РЕШЕНИЯ
Это на самом деле подобная проблема с номером 4, но с разными симптомами. К сожалению встроенные функции не могут иметь массивы вообще, даже если за ним следует их размер. Если вы попробывали включают размер вы получите дополнительный:

Код:

<path>errors.pwn(7) : warning 215: expression has no effect

Вы можете, однако, все еще добавить строки с префиксом

Код:

main()
{
    inline Func(string:arr[])
    {
    }
}

9.
КОД

Код:

uvar
    gFirst[MAX_PLAYERS][10], // Error line.
    gSecond[MAX_PLAYERS][10];

ОШИБКА

Код:

<path>errors.pwn(9) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

РЕШЕНИЯ
Переменные, объявленные с “new” или “stock” и др.Часто следуют новой строки приведенного выше шаблона примера. По техническим причинам это не может быть сделано с “uvar” и “svar” переменными. Каждый должен находиться на той же строке, что “uvar” или “svar”.

Код:

uvar gFirst[MAX_PLAYERS][10];
uvar gSecond[MAX_PLAYERS][10];

10.
КОД

Код:

public DoRead(name[], value[])
{
    INI_String("key", gValue); // Error line.
}

ПРОБЛЕМА

Код:

<path>errors.pwn(12) : error 017: undefined symbol "INI_String"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

РЕШЕНИЯ
“INI_String”Существует, он просто дает необычный ошибка, когда последний параметр пропущены. Вы должны вызвать его назначения длины.

Код:

public DoRead(name[], value[])
{
    INI_String("key", gValue, sizeof (gValue));
}

11.
КОД

Код:

#include <YSIy_commands>

ПРОБЛЕМА

Код:

<include>YSIy_debug.inc(367) : error 036: empty statement
<include>YSIy_debug.inc(367) : error 036: empty statement
<include>YSIy_amx.inc(367) : error 036: empty statement
<include>YSIy_amx.inc(367) : error 036: empty statement
<include>YSIy_amx.inc(411) : error 036: empty statement
<include>YSIy_amx.inc(411) : error 036: empty statement
<include>YSIy_amx.inc(646) : error 036: empty statement
<include>YSIy_amx.inc(646) : error 036: empty statement
<include>YSIy_amx.inc(780) : error 036: empty statement
<include>YSIy_amx.inc(780) : error 036: empty statement
<include>YSIy_amx.inc(938) : error 036: empty statement
<include>YSIy_amx.inc(938) : error 036: empty statement
<include>YSIy_amx.inc(958) : error 036: empty statement
<include>YSIy_amx.inc(958) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(144) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(144) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(150) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(150) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(159) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(159) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(174) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(174) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(183) : error 036: empty statement
<include>YSIinternaly_shortfunc.inc(183) : error 036: empty statement
<include>YSIinternaly_dohooks.inc(125) : error 036: empty statement
<include>YSIinternaly_dohooks.inc(125) : error 036: empty statement

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

РЕШЕНИЯ

Когда вы получаете сотни ошибок, как это внутри YSI, он, как правило, вызванные использованием нестандартных редактор (не PAWNO). Нет ничего плохого в других редакторах, некоторые просто созданы с различными умолчанию параметры командной строки для ****** (компилятор). Вы должны убедиться, что вы передаете эти два важных параметра:

12.
КОД

Код:

timer X[100]() // Error line.
{
}

ПРОБЛЕМА

Код:

<path>errors.pwn(3) : warning 218: old style prototypes used with optional semicolon
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

РЕШЕНИЯ
Это может быть вызвано с помощью любого мода, которые по какой-то необъяснимой причине решил игнорировать стандарта SA:MP форматирование и удаление точек с запятой. Чтобы это исправить, вам нужно сначала удалить эту строку:

13.
КОД

Код:

hook OnGameModeInit() // Error line.
{
}

ПРОБЛЕМА

Код:

<path>errors.pwn(3) : error 021: symbol already defined: "@yH_GameModeInit2"
<path>errors.pwn(3) : error 021: symbol already defined: "@yH_GameModeInit2"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

РЕШЕНИЯ

Код:

#include <YSIy_hooks>
#include <other>

hook OnGameModeInit() // Error line.
{
}

Должно быть

Код:

#include <other>
#include <YSIy_hooks>

hook OnGameModeInit() // Error line.
{
}

14.
КОД

Код:

pawnoincludeYSI/y_ini.inc(161) : fatal error 100: cannot read from file: "internaly_version"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

РЕШЕНИЯ
Истинная проблема здесь

Где-то в коде, и файл был включен неправильно. ВСЕ файлы YSI ДОЛЖНЫ быть включены символом обратного слэша. Меняем:

Автор : Тём4ик
На портале похожего урока не видел,решил сделать,всем спасибо,жду критики!

Добавить комментарий