• Страница 1 из 1
  • 1
[ Урок ] Подробно как исправить некоторые Warning и Error
Дмитрий Дата: Пятница, 03.08.2012, 23:00 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Уверен вам пригодится

[Waring]
%s- переменная


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

1)
PHP код:
Code
warning 219: local variable "%s" shadows a variable at a preceding level  


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


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

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


2)
PHP код:
Code
warning 217: loose indentation


Это значит что код не табулирован(код не построен лесенкой)
Пример:

PHP код:
Code
stock LSNews(color,const string[])
{
for(new i = 0; i < MAX_PLAYERS; i++){
if(IsPlayerConnected(i)){
if(!lNews[i]){
SendClientMessage(i, color, string);}}}}


пример правильного табулирования

Code
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) можем поставить
Code
#pragma tabsize 0


3) можем с помощи notepad++ все исправить (на форуме есть урок)

pragma tabsize - Он просто маскирует эти warning и не более

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


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


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


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


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


4)
Code
warning 216: nested comment ;


Вот так это выглядит
Code
/*case 458: //Fire&lvl    
исправление   
PHP код:
case 458: //Fire&lvl


5)
Code
warning 213: tag mismatch


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


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


6)
Code
warning 201: redefinition of constant/macro


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


Решение одну из двух удалить!
7)
Code
warning 200: symbol "%s" is truncated to 31 characters


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


Решение:
Просто сменить название или укоротить !
8)
Code
warning 202: number of arguments does not match definition


Это значит что у нас не совпадают аргументы
Возьмем самый простой пример:
Code
Create3DTextLabel(" ТУт типо текст .",0xFFA500FF,.0120,456.2717,35.1719,20.0);


Наша ошибка содержится здесь:
Code
-2041.0120,456.2717,35.1719,20.0    
-2041.0120,456.2717,35.1719--------- это на ша координата (она нас не интересует)
20.0--------вот наша ошибка (20----это расстояние с которого наш текст будет виден)
а вот 0 это у нас testLOS- линия видимости


решение простое:
Нам 0 нужно заменить на 1
Code
Create3DTextLabel(" ТУт типо текст .",0xFFA500FF,1111.1111,111.1111,11.1111,20.1);


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


Это означает что данный символ нигде не используется
Пример :
Создадим допустим переменную
Code
new respon;


И тут у нас возникает
Code
(1578) warning 203: symbol is never used: "respon"


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

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


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


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

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


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


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


[Error]

1)
Code
error 040: duplicate "case" label (value 28)


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


нам нужно цифру 28 изменит на другую (в той строчке на которую жалуется )
2)
Code
error 032: array index out of bounds (variable "JoinPed")


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


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


как видим
JoinPed[123] с начало с таким значением, а потом JoinPed[98]
Решение простое:
JoinPed[123] число в данных скобках должно быть одинаковым.
пример:

Code
else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[123][0]); SelectCharPlace[playerid] = 3; InviteSkin[playerid] = JoinPed[123][0]; }


3)

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


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

Code
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам.модера; }


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


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


Это значит что мы пропустили знак или скобку (в данном примере скобку)
Пример:
Code
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;
}  


смотрим на

Code
ProdyktsInfo[idx][prZamProd];


и вим что мы пропустили )
и так оно выглядит

Code
ProdyktsInfo[idx][prZamProd]);


Code
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)

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


Это означает что у вас после "case" идет if(dialogid == )
Пример:

Code
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 как и последующий диалог !

Code
case 7504:  <------------------- вот так это выглядит
      {   
          if(response)   
          {   
                SetCameraBehindPlayer(playerid); TogglePlayerControllable(playerid, 1);   
                SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);   
                ClothesRun[playerid] = 0;   
              return 1;   
          }  


6)

Code
error 004: function "%s" is not implemented


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

7)

Code
error 017: undefined symbol %s


Это означает что мы не поставили переменную (new)
Пример:

Code
error 017: undefined symbol "lol"


Решение:
Ко всем new добавим

Code
new lol;


Автор:shreson


From Russia With Love!
  • Страница 1 из 1
  • 1
Поиск: