[Ajuda] sizeof(Enum)
#1

Existe alguma include que me permita fazer isso: sizeof(Player[playerid][teste])?
Reply
#2

Ja o fez -.-'
Reply
#3

.... ?
Reply
#4

A questгo й: testou?
Reply
#5

Nгo, a questгo й acha bem insultar uma pessoa que o tenta ajudar ?

Nгo nгo testei, e enum = a new de um conjunto ordenado.
pawn Код:
enum Teste
{
Test2[128]
}
Tem de fazer algo do gйnero disto, ou seja decalar o valor mбximo..
( nгo sei se a forma do enum estarб correcta. ).
Reply
#6

Код:
enum eTeste
{
teste[32]
}

new pTeste[MAX_PLAYERS][eTeste];

sizeof(pTeste[playerid][teste]);
Segundo a sua teoria o cуdigo acima funciona, vai la testar..
Reply
#7

No passado, quando eu fazia GMs de RPG, deparei-me vбrias vezes com esse problema e nгo encontrei uma maneira de resolvк-lo. Eu sempre acabava verificando, no cуdigo da enumeraзгo, o tamanho da array constante quando precisava dele .



O problema em questгo consiste basicamente em obter, por um mйtodo como o do sizeof, o tamanho de uma array constante de uma enumeraзгo, como a array Segunda deste cуdigo:


pawn Код:
enum Constantes
{
    Primeira,
    Segunda[45],
    Terceira[30]
};
new Array[10][Constantes];


Por mais que nгo aparente, nгo й possнvel obter apenas com sizeof o tamanho da array Segunda, que й 45 .



A expressгo sizeof(Array), sintaticamente correta, resultaria em 10, o tamanho da primeira dimensгo da array Array. Por sua vez, a expressгo sizeof(Array[]), tambйm sintaticamente correta, equivaleria a 76, o tamanho da segunda dimensгo de Array e tamanho total da enumeraзгo, sendo que as constantes Primeira, Segunda e Terceira teriam respectivamente os tamanhos 1, 45 e 30.



Qualquer outra tentativa, como sizeof(Segunda), geraria erros de compilaзгo ou nгo forneceria o tamanho verdadeiro da array Segunda .



Estudando a situaзгo, descobri que a expressгo sizeof(Array[Segunda]) resultava em 45, o tamanho certo, quando a array Array era declarada desta forma:


pawn Код:
new Array[Constantes];

Em vez desta :


pawn Код:
new Array[10][Constantes];

Sendo assim, para o cуdigo original algo como sizeof(Array[0][Segunda]) ou sizeof(Array[][Segunda]) resultaria em 45. Isso, porйm, nгo passou de uma expectativa, visto que verifiquei que essas expressхes tambйm geravam erros de compilaзгo.



Percebi que provavelmente havia uma limitaзгo do compilador em relaзгo a aceitar uma sintaxe que funcionasse. A soluзгo que encontrei foi usar uma array intermediбria :


pawn Код:
enum Constantes
{
    Primeira,
    Segunda[45],
    Terceira[30]
};
new Array[10][Constantes];
new const Buffer[sizeof(Array[])];
#pragma unused Buffer
pawn Код:
printf("Tamanho da array 'Segunda': %d.", sizeof(Buffer[Segunda]));

A minha conclusгo й que se trata de uma incapacidade do compilador, que talvez nгo esteja presente em versхes mais recentes do Pawn com as quais o SA-MP nгo trabalha.



Espero ter ajudado .
Reply
#8

Grande rjjj
Reply
#9

Rjj vocк tem jeito com a parte teуrica de explicar as coisa !
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)