enum массив stringmap

T

Tolyan

PHP:
StringMap SkinValueStrMap;

enum sv
{
    float:pos[3],
    float:ang[3]
}

 {
    SkinValueStrMap = new StringMap();
    any[] array = new any[sv];
   
    array[pos] = {0.0,0.0,50.0};
    array[ang] = {0.0,0.0,0.0};
   
    SkinValueStrMap.SetArray("xxx", array, sv); // Записали
}
{
    any[] array = new any[sv];
    SkinValueStrMap.GetArray("xxx", array, sv); //Получили
   
    float f_temp[3];
    f_temp = array[pos];
    PrintToChatAll("f_temp > %0.1f %0.1f %0.1f", f_temp[0],f_temp[1],f_temp[2]); // f_temp[2] = 0.0 а должен 50.0  - почему?
}
--- Добавлено позже ---
Или все должно работать нормальНО?*
 
Последнее редактирование модератором:

komashchenko

Идиот
Сообщения
916
Реакции
2,570
Это баг компилятора,
C-подобный:
f_temp = array[pos];

addr.pri 0xfffffff0              ; f_temp
push.pri                       
load.s.pri 0xfffffffc            ; array
load.i                         
pop.alt                         
movs 0xc                         ; 12
load.i - там не нужен

так же вы можете делать так
PHP:
StringMap SkinValueStrMap;

enum sv
{
    float:pos[3],
    float:ang[3]
}

 {
    SkinValueStrMap = new StringMap();
    any array[sv];
  
    array[pos] = {0.0,0.0,50.0};
    array[ang] = {0.0,0.0,0.0};
  
    SkinValueStrMap.SetArray("xxx", array, sv); // Записали
}
{
    any array[sv];
    SkinValueStrMap.GetArray("xxx", array, sv); //Получили
    
    PrintToChatAll("f_temp > %0.1f %0.1f %0.1f", array[pos][0],array[pos][1],array[pos][2]); // f_temp[2] = 0.0 а должен 50.0  - почему?
}
так оно будет выводить нормально
 
T

Tolyan

Это баг компилятора,
C-подобный:
f_temp = array[pos];

addr.pri 0xfffffff0              ; f_temp
push.pri                      
load.s.pri 0xfffffffc            ; array
load.i                        
pop.alt                        
movs 0xc                         ; 12
load.i - там не нужен

так же вы можете делать так
PHP:
StringMap SkinValueStrMap;

enum sv
{
    float:pos[3],
    float:ang[3]
}

 {
    SkinValueStrMap = new StringMap();
    any array[sv];
 
    array[pos] = {0.0,0.0,50.0};
    array[ang] = {0.0,0.0,0.0};
 
    SkinValueStrMap.SetArray("xxx", array, sv); // Записали
}
{
    any array[sv];
    SkinValueStrMap.GetArray("xxx", array, sv); //Получили
   
    PrintToChatAll("f_temp > %0.1f %0.1f %0.1f", array[pos][0],array[pos][1],array[pos][2]); // f_temp[2] = 0.0 а должен 50.0  - почему?
}
так оно будет выводить нормально
так тоже пробовал даже компилить не захотело.. fatal error 190: too many error messages on one line
 

komashchenko

Идиот
Сообщения
916
Реакции
2,570
так тоже пробовал даже компилить не захотело.. fatal error 190: too many error messages on one line
всё прекрасно компилиться и работает
PHP:
#pragma semicolon 1
#pragma newdecls required

StringMap SkinValueStrMap;

enum sv
{
    Float:pos[3],
    Float:ang[3]
}

public void OnPluginStart()
{
    {
        SkinValueStrMap = new StringMap();
        any array[sv];
        
        array[pos] = view_as<float>({0.0,0.0,50.0});
        array[ang] = view_as<float>({0.0,0.0,0.0});
        
        SkinValueStrMap.SetArray("xxx", array, sv); // Записали
    }
    {
        any array[sv];
        SkinValueStrMap.GetArray("xxx", array, sv); //Получили
        
        PrintToChatAll("f_temp > %0.1f %0.1f %0.1f", array[pos][0],array[pos][1],array[pos][2]);
    }
}
http://www.sourcemod.net/compiler.php?go=dl&id=698535
 
T

Tolyan

всё прекрасно компилиться и работает
PHP:
#pragma semicolon 1
#pragma newdecls required

StringMap SkinValueStrMap;

enum sv
{
    Float:pos[3],
    Float:ang[3]
}

public void OnPluginStart()
{
    {
        SkinValueStrMap = new StringMap();
        any array[sv];
       
        array[pos] = view_as<float>({0.0,0.0,50.0});
        array[ang] = view_as<float>({0.0,0.0,0.0});
       
        SkinValueStrMap.SetArray("xxx", array, sv); // Записали
    }
    {
        any array[sv];
        SkinValueStrMap.GetArray("xxx", array, sv); //Получили
       
        PrintToChatAll("f_temp > %0.1f %0.1f %0.1f", array[pos][0],array[pos][1],array[pos][2]);
    }
}
SourceMod: Half-Life 2 Scripting
any[] array = new any[sv];
any array[sv];

а в чем разница??
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #6
@Tolyan, разница в том, что в первом случае, если Вы захотите, Вы не сможете использовать sizeof директиву компилятора на этой переменной, так как её размер считается динамическим.
 
T

Tolyan

@Tolyan, разница в том, что в первом случае, если Вы захотите, Вы не сможете использовать sizeof директиву компилятора на этой переменной, так как её размер считается динамическим.
да но дело в том что в 1 случае не компилировалось, а в 2 - компилировалось...
 
Сверху Снизу