Все вручную указывает количество массива через констант например
Работает
constant integer COUNT = 5
array memory[COUNT]
Решил сделать при init
integer count = 0
array memory[count]
когда при init указываю count +1 и так далее если параметры увеличивает но как видите ругает нельзя без константов
Есть ли другое решение?
Например val array = new Array<5> Другого не нашел решения
Принятый ответ
В структурах нужно обязательно указывать размер массива, так как для каждого поля создаётся массив (размер которого 8192). После на каждую инстанцию структуры отводится столько ячеек из 8192, сколько есть максимальный размер массива, который используется в структуре.
struct MyStruct
integer array u[3]
integer array k[5]
integer array t[10]
endstruct
На каждый объект этой структуры будет отведено 10 ячеек из 8192, при этом ячейка 0 занята на "null" структуры, а 8191 не используется. То есть всего объектов мы можем единовременно иметь 8190 / 10 = 819. Если захотим создать больше, будут выводиться ошибки, если включён Debug Mode, а объект просто не будет создан: функция allocate вернёт 0.
А чтобы использовать константы в определении размера массивов, пишите так:
globals
constant integer H = 500
constant integer P = 2 * H
endglobals
struct MyStruct
static constant integer U = 400
integer array z[P]
endstruct
Тут нужно отметить факт, что константы должны быть заданы чётко. vJass не будет вычислять P при компиляции, потому размер массива z в структуре равен 2 - первому числу, которое встречается в выражении P. Компилятор vJass просто копирует значение переменной и генерирует Jass код. Отсюда вытекает, что вы не можете регулировать размер массива во время игры - он отводятся при компиляции и записан в коде.
А вообще, читайте это. Там всё рассказано очень хорошо (почти).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
int memory[]
void myfunc(){
memory[count]=3553
}
Отредактирован scopterectus
а не вносить операция
Отредактирован scopterectus
Отредактирован pro100master
при старта игры создаю 2 тип state
а счетчик стал 2
потом при слздание DataUnit с привязка юнит создает нужное количесто статов
могу подругому сделать но не очень например array[(int(this) - 1) * TypeState.count + type] = 0
учитивая массив ограничено а хеш как обычно медленно работает
Отредактирован scopterectus
Отредактирован PT153