[Tutorial] Errores comunes їCуmo solucionarlos? - Page 2
#1

Los nuevos programadores del lenguaje pawn suelen tener errores comunes a la hora de programar y compilar. Estos errores se deben a fallos, falta de atenciуn, falta de comprensiуn, el uso de funciones externas de la ediciуn de Y_Less dentro de pawno y demбs.

A continuaciуn verбs varios tipos de errores comunes y como solucionarlos fбcil y sencillamente. Si tienes alguna duda sobre algъn otro error no comentado puedes dejarlo en el apartado de comentarios, que verй mientras vaya pasando el tiempo.
  • Lista de errores comunes:
  • Error: Undefined symbol 'symbol'
  • Error: Symbol already defined 'symbol'
  • Error: Expression has no effect
  • Error: Empty statement
  • Error: Function "function" is not implemented
  • Error: Expected token
  • Error: Only a single statement (or expression) can follow each “case”
  • Error: Argument type mismatch (argument x)
  • Error: Array sizes do not match, or destination array is too small
  • Lista de errores fatales:
  • Fatal Error: Cannot read from file 'file'
  • Lista de advertencias comunes:
  • Warning: Loose Indentation
  • Warning: Unreachable code
  • Warning: Nested comment
  • Warning: Number of arguments does not match definition
  • Warning: Symbol is never used 'symbol'
  • Warning: Tag mismatch
  • Warning: Unknown parameter in substitution


Error: Undefined symbol 'symbol'
Este error se genera a partir del uso de un sнmbolo, llбmese variable, define, etc, no definido їCуmo? Los casos mбs normales donde se genera este error es en el Copy & Paste, olvido de variables, o simplemente no darse cuenta de que no estб definido. їQuй podemos hacer para que no nos salga este error? Revisar cada vez que colocamos una condiciуn o simplemente cuando asignamos un valor a algo, llбmese usuario, vehнculo, etc.

pawn Code:
CMD:obtenervariable(playerid,params[])
{
Variable[playerid] = 1;
SendClientMessage(playerid, -1, "Has obtenido la variable necesaria");
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando la variable sin ser definida anteriormente.

pawn Code:
CMD:obtenervariable(playerid,params[])
{

new Variable[MAX_PLAYERS]; Variable[playerid] = 1;
SendClientMessage(playerid, -1, "Has obtenido la variable necesaria");
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando la variable definida anteriormente.

Error: Symbol already defined 'symbol'
Este error se genera a partir de la definiciуn repetida una o mбs veces de un sнmbolo, llбmese variable, define, etc. їCуmo sucede? Los casos mбs normales son simplemente olvidarse de que ya estб definido o tenerlo definido globalmente o volver a definirlo para una callback o comando їCуmo solucionarlo? Presionar CTRL + F y buscar la definiciуn y borrar la repetida.

pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
if(Variable[playerid] < 1 )
{
new Variable[MAX_PLAYERS]; Variable[playerid] = 0;
}
return 1;
}
En este ejemplo se puede ver claramente como se estб definiendo otra vez la variable definida anteriormente.


pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
if(Variable[playerid] < 1 )
{
Variable[playerid] = 0;
}
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando la variable definida anteriormente.


Error: Expression has no effect
Йste error se debe al uso de funciones no agregadas dentro de la ediciуn de Y_Less sobre pawno, tales como el uso de caracteres sin comillas o fuera de comentarios y demбs sнmbolos їCуmo? A veces no nos damos cuenta de lo que estamos escribiendo por el simple hecho de estar viendo el teclado y no re leer una vez escrito.

pawn Code:
OnPlayerConnect(playerid)
{
Envнale este mensaje al que se conecta: Hola washim.
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando funciones no aсadidas en pawn.


pawn Code:
OnPlayerConnect(playerid)
{
SendClientMessage(playerid, -1, "Hola washim.");
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando funciones aсadidas en pawn.

Error: Empty statement
Este error se genera a partir de la doble colocaciуn de fichas, tales como ;, a veces la tecla nos juega una mala pasada o simplemente nos confundimos y la presionamos sin querer.

pawn Code:
CMD:dameunmensaje(playerid,params[])
{
SendClientMessage(playerid,-1,"Te doy un mensaje");;
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando dos fichas repetidas.

pawn Code:
CMD:dameunmensaje(playerid,params[])
{
SendClientMessage(playerid,-1,"Te doy un mensaje");
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando una sola ficha.

Error: Function "function" is not implemented
Este error se genera a partir de dos causas, una de ellas es el uso de una funciуn no implementada por el compilador o que el compilador no puede leer. Si a vos se te generan 26 erroers es porque no cerraste una callback con su respectiva llave, }, y esa es la segunda causa.

pawn Code:
CMD:dameunmensaje2(playerid,params[])
{
SendFormatMessage(playerid,-1,"Platita: %d ... Score: %d",GetPlayerMoney(playerid),GetPlayerScore(playerid));
return 1;
}
En este ejemplo se puede ver claramente como se estб utilizando una funciуn que el compilador no lee.

pawn Code:
new str[128];
#define SendFormatMessage(%0,%1,%2,%3) format(str, sizeof(str),%2,%3) && SendClientMessage(%0, %1, str)
En este ejemplo se puede ver claramente como se estб definiendo las funciones.


Error: Expected token
Este error se genera a partir de cerrar una funciуn o retorno sin fichas ( punto y coma ; ) entonces la funciуn no puede ejecutarse ni tampoco compilar.

pawn Code:
return 1
}
En este ejemplo se puede ver claramente como se estб retornando sin fichas

pawn Code:
return 1;
}
En este ejemplo se puede ver claramente como se estб retornando con fichas.

Error: Only a single statement (or expression) can follow each “case”
Este error se genera a partir de que solamente una instrucciуn (o expresiуn) puede seguir despuйs de un "case", el uso excesivo generarб el error.

pawn Code:
main()
{
    switch(x)
    {
        case 0: print("hola"); print("hola");
    }
    return 1;
}
En este ejemplo se puede ver claramente como se estб usando las dos funciones en una sola linea despuйs del case.


pawn Code:
main()
{
    switch(x)
    {
        case 0:
        {
            print("hola");
            print("hola");
        }
    }
    return 1;
}
En este ejemplo se puede ver claramente como se estб usando solamente una funciуn por cada linea despuйs del case.


Error: Argument type mismatch (argument x)
Este error se genera a partir de el uso incorrecto de un argumento, por ejemplo se estб colocando entre comillas un argumento que va sin las mismas.

pawn Code:
Kick("playerid");
En este ejemplo se puede ver claramente como se estб usando el argumento correcto pero entre comillas.

pawn Code:
Kick(playerid);
En este ejemplo se puede ver claramente como se estб usando el argumento correctamente.

Error: Array sizes do not match, or destination array is too small
Este error se genera a partir de el uso de poco valor en arrays o que el valor del array no es exacto al que se estб usando.


pawn Code:
new destino[8];
new msg[] = "Hello World!";
 
destino= msg;
pawn Code:
new destino[13];
new msg[] = "Hello World!";
 
destino= msg;
IMPORTANTE: En arrays multi-dimensionales se usa el array con el valor exacto usado y en arrays-individuales se usa la misma cantidad o mбs.


Fatal error: Cannot read from file 'file'
Este error fatal se genera a partir de que el compilador no puede leer si tal archivo,llбmese include, se encuentra para poder utilizarlo.

Arreglo: Coloque el archivo en la carpeta de pawno/include o eliminar la lнnea include. Esto puede causar problemas con su script, asн que es mejor usar la primera soluciуn.


Warning: Loose Indentation
Esta advertencia se genera a partir del uso excesivo de sangrнa en una linea debajo de la que estб en la parte superior. їCуmo arreglarlo? Colocar la linea en el mismo espacio de caracteres de la linea superior.


pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
SendClientMessage(playerid, -1, "Hola washim");
     Variable[playerid] = 1;
return 1;
}
En este ejemplo se puede ver claramente como se estб dejando mucha sangrнa en la funcion.

pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
SendClientMessage(playerid, -1, "Hola washim");
Variable[playerid] = 1;
return 1;
}
En este ejemplo se puede ver claramente como se estб colocando la funciуn debajo de la otra.

Warning: Unreachable code
Esta advertencia se genera a partir de que el compilador no puede llegar a ningъn lado por el retorno de la callback o condiciуn.

pawn Code:
OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(vehicleid == 520)
    {
        SendClientMessage(playerid,-1,"Entraste en el auto ID 520.");
        return 1;
    }
    else return 0;
    return 1;
}
En este ejemplo se puede ver claramente como se estб colocando erroneamente el retorno.

pawn Code:
OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(vehicleid == 520)
    {
        SendClientMessage(playerid,-1,"Has entrando en el auto ID 520.");
        return 1
    }
    return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente el retorno.

Advertencia: Nested comment
Esta advertencia se genera a partir de crear un comentario dentro de otro comentario. їTonto no? Pero ocurre y muchas veces.

pawn Code:
OnPlayerConnect(playerid)
/* Si ven le estбn mandando un mensaje re pillo
  /* y no sй por quй */

SendClientMessage(playerid, -1, "ASD");
return 1;
}
En este ejemplo se puede ver claramente como se estб colocando el comentario correctamente dentro del otro.


pawn Code:
OnPlayerConnect(playerid)
/* Si ven le estбn mandando un mensaje re pillo
 y no sй por quй */

SendClientMessage(playerid, -1, "ASD");
return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente el mensaje dentro del otro.

Advertencia: Number of arguments does not match definition
Esta advertencia se genera a partir del uso de mбs o menos argumentos definidos en una funciуn, cada funciуn tiene su argumento o sus argumentos.


pawn Code:
OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(vehicleid == 520)
    {
        SendClientMessage(playerid,-1,"Has entrando en el auto ID 520.");
        return 1
    }
    return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente el retorno.

Advertencia: Symbol is never used 'symbol'
Esta advertencia se genera a partir de crear un comentario dentro de otro comentario. їTonto no? Pero ocurre y muchas veces.

pawn Code:
CMD:centermap(playerid,params[])
{
    #pragma unused params
    SetPlayerPos(playerid,0.0,0.0,3.0,90.0);
    SendClientMessage(playerid,-1,"Bienvenido a vlu verri.");
    return 1;
}
En este ejemplo se puede ver claramente como se estб colocando erroneamente el angulo dentro de la funciуn de la coordenada.


pawn Code:
CMD:centermap(playerid,params[])
{
    #pragma unused params
    SetPlayerPos(playerid,0.0,0.0,3.0);
    SetPlayerFacingAngle(playerid,90.0);
    SendClientMessage(playerid,-1,"Bienvenido a vlu verri.");
    return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente los argumentos por separado, el angulo en su funciуn y las coordenadas en su funciуn.

Advertencia: Symbol is never used 'symbol'
Esta advertencia se genera a partir de crear una definiciуn, llбmese variable o define, y nunca usarla, por lo que la definiciуn queda sin uso.

pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente la definiciуn pero jamбs se usa.

pawn Code:
OnPlayerConnect(playerid)
{
new Variable[MAX_PLAYERS];
Variable[playerid] = 1;
return 1;
}
En este ejemplo se puede ver claramente como se estб colocando correctamente la definiciуn y se le otorga al usuario en valor de uno.

Advertencia: Tag mismatch
Esta advertencia se genera cuando no se estб usando la etiqueta correcta o directamente no se estб usando en un sнmbolo, llбmese array.

pawn Code:
CMD:posicion(playerid,params[])
{
    #pragma unused params
    new Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    printf("Pos: X: %f || Y: %f || Z: %f",Pos[0],Pos[1],Pos[2]);
    return 1;
}
En este ejemplo se puede ver claramente como se estб definiendo erroneamente el array de las coordenadas.

pawn Code:
CMD:posicion(playerid,params[])
{
    #pragma unused params
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    printf("Pos: X: %f || Y: %f || Z: %f",Pos[0],Pos[1],Pos[2]);
    return 1;
}
En este ejemplo se puede ver claramente como se estб definiendo correctamente el array de las coordenadas

Advertencia: Unknown parameter in substitution
Esta advertencia se genera a partir del uso de un parбmetro en una definiciуn que es desconocido para el compilador.

pawn Code:
#define PutPos(%1,%2,%3,%4); SetPlayerPos(%9,%2,%3,%4);
En este ejemplo se puede ver claramente como se estб usando erronemente el 9, ya que no estб definido.

pawn Code:
#define PutPos(%1,%2,%3,%4); SetPlayerPos(%1,%2,%3,%4);
En este ejemplo se puede ver claramente como se estб usando correctamente la funciуn ya que estбn todos los nъmeros definidos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)