[MYSQL R40] cache_get_value_name expected token: ";", but found "]"
#1

Hello, I have problems with pawn, I don't know what is causing this.

The error line is (186):
PHP Code:
cache_get_value_name(0"password"PlayerInfo[playerid][password], sizeof(PlayerInfo[playerid][password]) ); 
and before it, I have this:
PHP Code:
cache_get_value_name_int(0"id"PlayerInfo[playerid][account_id]); 
together:
PHP Code:
    cache_get_value_name_int(0"id"PlayerInfo[playerid][account_id]);
    
cache_get_value_name(0"password"PlayerInfo[playerid][password], sizeof(PlayerInfo[playerid][password]) ); 
The "PlayerInfo" enum:

PHP Code:
enum EnumPlayerInfo
{
    
account_id,
    
bool:prompted,
    
bool:registered,
    
bool:authenticated,
    
password[50],
    
email[64],
    
registered_at[40],
    
last_login[40],
    
last_login_ip[30],
    
last_login_country[50]
}
new 
PlayerInfo[MAX_PLAYERS][EnumPlayerInfo]; 
and finally the error:

Code:
bare.pwn(186) : error 001: expected token: "]", but found "-identifier-"
bare.pwn(186) : warning 215: expression has no effect
bare.pwn(186) : error 001: expected token: ";", but found "]"
bare.pwn(186) : error 029: invalid expression, assumed zero
bare.pwn(186) : fatal error 107: too many error messages on one line
What is causing this?
If I repalce 'sizeof..' with a static number like 128, the error disappears.

Thank you in advance.
Reply
#2

An enumerated array only has one size. It's kind of difficult to explain but in an enum the value of the next specifier is the value of the previous specifier plus one. In the case of an array it adds the size of the array. So your enum is this:
PHP Code:
enum EnumPlayerInfo
{
    
account_id// 0
    
bool:prompted// 1
    
bool:registered// 2
    
bool:authenticated// 3
    
password[50], // 4
    
email[64], // 54
    
registered_at[40], // 118
    
last_login[40], // 158
    
last_login_ip[30], // 188
    
last_login_country[50// 238

and what actually get compiled is simply this:
PHP Code:
new PlayerInfo[MAX_PLAYERS][289]; 
I may have been slightly off with my calculations but the statement stands.
Reply
#3

Like Vince said, you have to use static number - 50.
Reply
#4

Quote:
Originally Posted by Vince
View Post
An enumerated array only has one size. It's kind of difficult to explain but in an enum the value of the next specifier is the value of the previous specifier plus one. In the case of an array it adds the size of the array. So your enum is this:
PHP Code:
enum EnumPlayerInfo
{
    
account_id// 0
    
bool:prompted// 1
    
bool:registered// 2
    
bool:authenticated// 3
    
password[50], // 4
    
email[64], // 54
    
registered_at[40], // 118
    
last_login[40], // 158
    
last_login_ip[30], // 188
    
last_login_country[50// 238

and what actually get compiled is simply this:
PHP Code:
new PlayerInfo[MAX_PLAYERS][289]; 
I may have been slightly off with my calculations but the statement stands.
Quote:
Originally Posted by raydx
View Post
Like Vince said, you have to use static number - 50.
Oh well... Then I'll skip the maxlen parameter.

Thank you guys!


Edit: It can't be skkiped, The wiki page for MySQL R40 has a note:


Quote:

You have to provide the size (max_len) by yourself if you use an enum-array as destination.

source: https://sampwiki.blast.hk/wiki/MySQL#cache_get_value_index
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)