Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Исправление error/warning - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Тема закрыта

Исправление error/warning (Для новичков)

#1
Пользователь офлайн   !leo 

  • Знаток
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
[Warning]
%s- переменная
Переменная - это хранилище данных, куда мы можем записывать
различные данные для их последующего вызова. Тоесть действия с переменными предельно просты: запись информации,вывод и
использование информации. Если присмотрется ближе, то список можно пополнить еще одним пунктом - объявление переменной.
Каждая переменная имеет свое название, чтобы компилятор мог отличить друг от друга переменные, название мы задаем при
объявлении. Оператор объявления переменной - new

1)
warning 219: local variable "%s" shadows a variable at a preceding level

Это значит что переменная дважды объявлена.
Пример:
new neka;
new neka;

Что же нам делать, а вот что:
1) мы можем одну из них удалить;
2) можем изменить;

Но не стоит забывать что при изменении переменной нам нужно заменить все что её касается
вот пример правильного изменения:
        new neka1;
    neka1 = CreatePickup(1239, 2, 1380.3220,-1771.3235,13.5469);

2)
warning 217: loose indentation

Это значит что код не табулирован(код не построен лесенкой)
Пример:
stock LSNews(color,const string[])
{
for(new i = 0; i < MAX_PLAYERS; i++){
if(IsPlayerConnected(i)){
if(!lNews[i]){
SendClientMessage(i, color, string);}}}} 

пример правильного табулирования
stock LSNews(color,const string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(!lNews[i])
            {
                SendClientMessage(i, color, string);
            }
        }
    }
} 

Что же делать? ответ прост
1) мы можем делать все вручную
2) можем поставить #pragma tabsize 0
3) можем с помощи notepad++ все исправить (на форуме есть урок)
pragma tabsize - Он просто маскирует эти warning и не более

3)
warning 235: public function lacks forward declaration %s  

Это означает что у функции нету forward
Пример:
Вы создали паблик
public lol()

И увас появляется этот варинг что же делать?
ответ прост
добавляем forward
 forward lol();
public lol()

если вы не хотите каждый раз писать forward то можно сделать так:
#define public:%1(%2) forward %1(%2);
public %1(%2) 

и тогда новые паблики мы пишем так
public:lol()


4)
warning 216: nested comment ;  

Вот так это выглядит
/*case 458: //Fire&lvl  

исправление
case 458: //Fire&lvl


5)
warning 213: tag mismatch 

Это означает не совпадения аргументов
вот допустим самый простой случай:
#define CreateObject CreateDynamicObject
#define MoveObject MoveDynamicObject  

решение простое
#define CreateObject, CreateDynamicObject
#define MoveObject,  MoveDynamicObject  


6)
warning 201: redefinition of constant/macro

Это означает что в дефайнах(define)
Пример:
#define OnPlayerEnterRaceCheckpoint
#define OnPlayerEnterRaceCheckpoint  

Решение одну из двух удалить

7)
warning 200: symbol "%s" is truncated to 31 characters  

Это обозначает что мы при создании переменной ввели больше 31 символа
Пример:
new sssssssssssssssssssssssssssssss;

Решение:
Просто сменить название или укоротить !

8)
warning 202: number of arguments does not match definition 

Это значит что у нас не совпадают аргументы
Возьмем самый простой пример:
                    SendAdminMessage(COLOR_LIGHTRED, string, 5); 

Проблема заключается в 5, которая написана после string.
Найдём stock SendAdminMessage
stock SendAdminMessage(color, string[])
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
		    if(PlayerInfo[i][pAdmin] >= 1)
		    {
				SendClientMessage(i, color, string);
			}
		}
	}
}

Объясню как можно понятней и проще. Обратим внимание на эту строчку:
stock SendAdminMessage(color, string[])

Как мы видим используется только color и string[], следовательно 5 будет лишней.

9)
warning 203: symbol is never used: %s 

Это означает что данный символ нигде не используется
Пример :
Создадим допустим переменную new respon;
И тут у нас возникает
(1578) warning 203: symbol is never used: "respon"

Что же делать?
Ответ прост:
найти эту переменную и удалить

10)
warning 204: symbol is assigned a value that is never used %s

Это значит что создали переменную и массив а он негде не используется
Пример:
new blabal[15];

Решения: просто удалить

11)
warning 209: function "%s" should return a value

Это значит что наша функция не возвращается(простыми словами нету return 1; или return 0
пример:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) 
{ 
   if (newkeys == 1024) 
   { 
   OnPlayerCommandText(playerid,"/Blablabal"); 
   return 1; <========Вот наш return  ДО
   } 
}

Решения:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   if (newkeys == 1024)
   {
   OnPlayerCommandText(playerid,"/Blablabal");
   }
   return 1; <========Вот наш return ПОСЛЕ
}  

[Error]
1)
error 040: duplicate "case" label (value 28)

это означает что case с таким значением повторяется
Решение этой проблемы простое
case 28:
case 28:

нам нужно цифру 28 изменит на другую (в той строчке на которую жалуется )

2)
error 032: array index out of bounds (variable "JoinPed")  

Это означает что индекс массива превышен (но не всегда смотрим дальше)
Пример:
new JoinPed[131][1] = {

131- массив поигравшись с ним я понял что дело не в нем, а вчёмже спросите вы?
пример данной ошибки:
                else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[123][0]); SelectCharPlace[playerid] = 3; InviteSkin[playerid] = JoinPed[98][0]; }  

как видим
JoinPed[123] с начало с таким значением, а потом JoinPed[98]
Решение простое:
JoinPed[123] число в данных скобках должно быть одинаковым.
пример:
else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[123][0]); SelectCharPlace[playerid] = 3; InviteSkin[playerid] = JoinPed[123][0]; }  


3)
 error 037: invalid string (possibly non-terminated string)  

Это означает что строка неправильная а точнее где то допущена ошибка
пример:
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам.модера; }  

как видим нам после слова "модера" не хватает "
пример:
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам.модера"; }  


4)
error 001: expected token: ",", but found ";"  

Это значит что мы пропустили знак или скобку (в данном примере скобку)
Пример:
public SaveProdykts()
{
    new idx;
    new File: file2;
    while (idx < sizeof(ProdyktsInfo))
    {
        new coordsstring[256];
        format(coordsstring, sizeof(coordsstring), "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
        ProdyktsInfo[idx][prSous],
        ProdyktsInfo[idx][prPizza],
        ProdyktsInfo[idx][prMilk],
        ProdyktsInfo[idx][prJuice],
        ProdyktsInfo[idx][prSpirt],
        ProdyktsInfo[idx][prChicken],
        ProdyktsInfo[idx][prKolbasa],
        ProdyktsInfo[idx][prFish],
        ProdyktsInfo[idx][prIceCream],
        ProdyktsInfo[idx][prChips],
        ProdyktsInfo[idx][prZamProd];
        if(idx == 0)
        {
            file2 = fopen("[prodykts]/prodykts.cfg", io_write);
        }
        else
        {
            file2 = fopen("[prodykts]/prodykts.cfg", io_append);
        }
        fwrite(file2, coordsstring);
        idx++;
        fclose(file2);
    }
    return 1;
}  

смотрим на
ProdyktsInfo[idx][prZamProd];  

и вим что мы ппропустили )
и так оно выглядит
ProdyktsInfo[idx][prZamProd]); 

public SaveProdykts()
{
    new idx;
    new File: file2;
    while (idx < sizeof(ProdyktsInfo))
    {
        new coordsstring[256];
        format(coordsstring, sizeof(coordsstring), "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
        ProdyktsInfo[idx][prSous],
        ProdyktsInfo[idx][prPizza],
        ProdyktsInfo[idx][prMilk],
        ProdyktsInfo[idx][prJuice],
        ProdyktsInfo[idx][prSpirt],
        ProdyktsInfo[idx][prChicken],
        ProdyktsInfo[idx][prKolbasa],
        ProdyktsInfo[idx][prFish],
        ProdyktsInfo[idx][prIceCream],
        ProdyktsInfo[idx][prChips],
        ProdyktsInfo[idx][prZamProd]);< ----------- И вот наша скобка 
        if(idx == 0)
        {
            file2 = fopen("[prodykts]/prodykts.cfg", io_write);
        }
        else
        {
            file2 = fopen("[prodykts]/prodykts.cfg", io_append);
        }
        fwrite(file2, coordsstring);
        idx++;
        fclose(file2);
    }
    return 1;
}  


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

Это означает что у вас после "case" идет if(dialogid == )
Пример:
  case 7507: 
    { 
        if(response) ClothesSex[playerid] = 1; 
        else ClothesSex[playerid] = 2; 
        ShowPlayerDialog(playerid,7504,2,"??????? ??????","{A0B0D0}?????????? ?????? {7CC000}300$\n{A0B0D0}??????? ?????? {7CC000}300$\n{A0B0D0}???????????? ?????? {7CC000}300$\n{A0B0D0}?????","???????","?????"
); 
        return 1; 
    } 
if(dialogid == 7504)  <------------------- вот наша и ошибка 
    { 
        if(response) 
        { 
              SetCameraBehindPlayer(playerid); TogglePlayerControllable(playerid, 1); 
              SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]); 
              ClothesRun[playerid] = 0; 
            return 1; 
        }  

Решение простое:
if(dialogid == 7504) это нам нужно заменить на case как и последующий диалог !
case 7504:  <------------------- вот так это выглядит
    { 
        if(response) 
        { 
              SetCameraBehindPlayer(playerid); TogglePlayerControllable(playerid, 1); 
              SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]); 
              ClothesRun[playerid] = 0; 
            return 1; 
        } 


6)
error 004: function "%s" is not implemented 

Это означает что мы пропустили скобку.
Мой совет
1)проверить весь код в ручную
2)на форуме был урок как найти не по ставленую скобку
3)Можно воспользоватся notepad++ там показы линии открытых скобок и тогда можно найти эту скобку

7)
fatal error 100: cannot read from file: "lalka"

Скачайте инклюд (в данном случае инклюд называется лалка) и поместите его в pawno/include в папке сервера.

[Прочее]
Если у вас выбивает компилятор или показывает отчет об ошибке скорее всего вы пропустили скобку.

Сообщение отредактировал Killix: 24 Август 2013 - 20:03


Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Тема закрыта

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей