Как-то я не так использую структуру. Должна каждая структура инкрементить значения, но как будто инкрементится только одна.
//Сама структура
struct Resist
{
    real Phys = 0.
    real Magic = 0.
    real Poison = 0.
    real Fire = 0.
    real Ice = 0.
    real Lightning = 0.
    real Light = 0.
    
    void Inc()
    {
        this.Phys++
        this.Magic++
        this.Poison++
        this.Fire++
        this.Ice++
        this.Lightning++
        this.Light++
    }
}
...
//Массив структур
Resist Resists[4]
...
//Тело функции
int i = 0
    while (i<4)
    {
        Resists[i].Inc()
        BJDebugMsg(R2S(Resists[i].Fire))
        ++i
    }
...

Принятый ответ

стоп
а где заполнение массива структур?
мб все элементы массива одинаковы и ты просто инкриментишь одну и туже структуру 4 раза
создание структуры через статичный метод create идёт
0
28
9 лет назад
0
странно
кстати this можно не писать
и хотелось бы дебаг лог
0
15
9 лет назад
0
nvc123, собственно вот.
Загруженные файлы
0
28
9 лет назад
0
а скомпиленный код кинь
0
15
9 лет назад
Отредактирован Audes
0
Структура
struct Resist
real Phys=0.
real Magic=0.
real Poison=0.
real Fire=0.
real Ice=0.
real Lightning=0.
real Light=0.
method Inc takes nothing returns nothing
set this.Phys=this.Phys+1
set this.Magic=this.Magic+1
set this.Poison=this.Poison+1
set this.Fire=this.Fire+1
set this.Ice=this.Ice+1
set this.Lightning=this.Lightning+1
set this.Light=this.Light+1
endmethod
endstruct
Функция
function Trig_Load_Actions takes nothing returns nothing
local integer i=0
loop
exitwhen        not ((i<4))
call Resists[i].Inc()
call BJDebugMsg(R2S(Resists[i].Fire))
set i=i+1
endloop
endfunction
2
28
9 лет назад
2
стоп
а где заполнение массива структур?
мб все элементы массива одинаковы и ты просто инкриментишь одну и туже структуру 4 раза
создание структуры через статичный метод create идёт
Принятый ответ
0
15
9 лет назад
Отредактирован Audes
0
nvc123, всё что нашел:
globals
boolexpr cj_true_bool_4896bnao87
dialog array udg_Dialog
button array udg_btnBarb
trigger gg_trg_Load=null
trigger gg_trg_ShowDialog=null
trigger gg_trg_Pick=null
integer SimpleResist
integer si__Resist_F=0
integer si__Resist_I=0
integer array si__Resist_V
real array s__Resist_Phys
real array s__Resist_Magic
real array s__Resist_Poison
real array s__Resist_Fire
real array s__Resist_Ice
real array s__Resist_Lightning
real array s__Resist_Light
integer array s__Resists
endglobals
Про create не знал, попробую исправить.
Решение:
Resists[i] = Resist.create()
Спасибо!
0
28
9 лет назад
0
структуры в jass больше похожи на классы java чем на c++
то есть объекты надо создавать
0
29
9 лет назад
0
nvc123, ну так то объекты везде надо создавать
0
28
9 лет назад
0
alexprey, в c++ при объявлении переменной объект создаётся сам (статическая память)
а создавать надо только динамические объекты
например
class Point{
	float x,y;

public:

	Point(){
	x=0;
	y=0;
	}
}
....
Point a; //создан объект класса Point с координатами 0,0
а в джаве подобного нету и все объекты создаются через new
Audes, прочти
0
29
9 лет назад
0
nvc123, с чего это вдруг статическая память то? Он разве не в стековую память создает такие объекты? Опять же, все так же вызывается конструктор, неявно для стандартного и явно если класс не имеет конструктор по умолчанию. Так что ты не прав.
0
28
9 лет назад
0
alexprey, ты не понял
смысл в том что в c++ не надо писать new
то есть можно просто
Resist Resists[4]
и при наличие конструктора по умолчанию будет создано 4 объекта класса Resist
а в jass/java подобного нету и надо писать create()/new
в данном случае главное то что под c++данный код заработал бы(если поставить ; и заменить real на float)
0
15
9 лет назад
0
nvc123, спасибо, мне как раз синтаксис си удобнее кажется.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.