AMX MOD X
Пятница, 17.05.2024, 02:14:49



Приветствую Вас Гость | RSS
[ Главная ] [ must be a constant expression ошибка - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » must be a constant expression ошибка
must be a constant expression ошибка
RE_an1m@t0rrДата: Воскресенье, 27.05.2007, 11:29:56 | Сообщение # 1
Лейтенант
Группа: Скриптеры
Сообщений: 77
Репутация: 0
Статус: Не в сети
как исправить шоибку ?
Error: Must be a constant expression; assumed zero on line 31
cry

Code

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "iMsg"
#define VERSION "0.1"
#define AUTHOR "RE?-an1m@t0rr"

#define Msg_MsgMax_LinkExec  "[iMsg]:Maximum message links execed"
#define Msg_MsgNo_players    "[iMsg]:No players on such team"
#define Msg_MsgExec  "<<Msg>> %s:%s"

new const    gc_iMsg_Maxlen  =    64

public plugin_init()  
{
  register_plugin(PLUGIN, VERSION, AUTHOR)
  register_clcmd("msg","cmd_Message",ADMIN_USER,"<userid,@team,name or ip> <text>")
}

public cmd_Message(id,level,cid)
{
   
  new arg1[32],name[33]
  new arg2[gc_iMsg_Maxlen]
   
  read_argv(1,arg1,31)
  read_argv(2,arg2,(gc_iMsg_Maxlen-1))
  get_user_name(id,name,32)
   
  if(arg2[gc_iMsg_Maxlen-1] != '0')
  {
   client_print(id,print_chat,Msg_MsgMax_LinkExec)
   return PLUGIN_HANDLED
  }
   
  if(arg1[0] == '@')
  {
   new players[32],playersnum
   get_players(players,playersnum,"ae",arg1[1])
    
   if(playersnum == 0)
   {
    client_print(id,print_chat,Msg_MsgNo_players)
    return PLUGIN_HANDLED
   }
    
   new i
   for(i=0;i<playersnum;i++)
   {
    new player = players[i]
    client_print(id,print_chat,Msg_MsgExec,name,arg2)
   }
  }
   
   
  return PLUGIN_CONTINUE
}

 
VENДата: Воскресенье, 27.05.2007, 16:35:14 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
А почему бы не заменить
Code
new const    gc_iMsg_Maxlen  =    64
на
Code
#define MSG_MAXLEN 64
?
 
RE_an1m@t0rrДата: Воскресенье, 27.05.2007, 19:51:06 | Сообщение # 3
Лейтенант
Группа: Скриптеры
Сообщений: 77
Репутация: 0
Статус: Не в сети
а ето не одно и тоже? wacko
 
VENДата: Воскресенье, 27.05.2007, 20:03:38 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Нет. Первое - постоянная переменная, второе - макроконстанта.
 
slogicДата: Понедельник, 28.05.2007, 15:39:53 | Сообщение # 5
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Очень странно, что PAWN не может испльзовать константу в качестве размерности при объявлении массива. Хотя если использовать [sizeof(x)], то здесь все работает. Или что-то изменили в компиляторе.
 
VENДата: Понедельник, 28.05.2007, 23:07:36 | Сообщение # 6
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Тут нет ничего странного и удивительного - компилятор на стадии прекомпиляции использует только "реальные" константы, т.е. либо макроконстанты, либо константы типа const gc_iMsg_Maxlen = 64.

sizeof оператор просто получает размерность, которая также является "реальной" константой.

new const создает переменную, пусть даже и с запретом ее изменения. В общепринятой терминологии это называется "constant variable".

 
slogicДата: Вторник, 29.05.2007, 15:43:15 | Сообщение # 7
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
В этом и тупость, что new const - это не реальная константа, а readonly переменная. Кому нахрен нужна такая разница?

Делал я кстати просто с const. Там лажа какая-то была с типами (предупреждения), плюс стали скрыты реальные ошибки (т.е. компилятор ничего про них не писал, а стал как раз после того как define вместо константы использовал).

Сообщение отредактировал slogic - Вторник, 29.05.2007, 15:43:56
 
RE_an1m@t0rrДата: Вторник, 29.05.2007, 16:34:56 | Сообщение # 8
Лейтенант
Группа: Скриптеры
Сообщений: 77
Репутация: 0
Статус: Не в сети
ето amxmodx developer team для разнообразия такое сделала
или баг о котором они незнают? happy
 
VENДата: Вторник, 29.05.2007, 20:19:47 | Сообщение # 9
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Я думаю, что многие не сочли бы это за баг. Особенность pawn/compiler - возможно.
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » must be a constant expression ошибка
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024