找回密码
 点一下
查看: 2530|回复: 18

全局变量的使用  又见鬼了 郁闷啊!!

[复制链接]
发表于 2010-11-30 21:47:24 | 显示全部楼层 |阅读模式
            我就郁闷了  为什么看似很简单的使用  却也出问题呢

       先在 [jass]
globals
integer i_sg
endglobals
[/jass]

定义了  i_sg这个整数变量

然后在     计数器到期的函数里设置  set i_sg=i_sg+1   但是这一步 貌似是有问题的  因为  JASS运行到这里就停止了


就是不知道为什么会到这里停止  我还在  这一步的上面下面各输出字符串  上面的输出了 下面的不输出 不就说明 到这里就不运行了吗   但是  这一步到底哪里错了  

求解答啊!!   
                 

额 答案我已经知道了   全局变量定义的   一定要设置初始值  直接set就JASS运行停在那一步了 但能通过编译   至于楼下的某个说要加  udg_  纯粹是误导
发表于 2010-11-30 22:00:34 | 显示全部楼层
无图无真相
回复

使用道具 举报

 楼主| 发表于 2010-11-30 22:05:43 | 显示全部楼层

回 1楼(希瓦) 的帖子

是真的    帮忙猜测下  一般这样的问题  是为什么会这样的   很是纳闷啊
回复

使用道具 举报

发表于 2010-11-30 23:40:02 | 显示全部楼层
可能性很多啊... 比如到了j执行步数上限什么的...
回复

使用道具 举报

发表于 2010-12-1 09:21:11 | 显示全部楼层
把出问题的图扔上来吧,如果不放心可以扔一个有同样问题的测试图上来
回复

使用道具 举报

 楼主| 发表于 2010-12-1 10:10:18 | 显示全部楼层

回 4楼(zhuzeitou) 的帖子

谢谢大家的回答  在另一个JASS论坛

有人提议说  可能是因为 全局变量 必须  先有初始值 然后在 用 set  或许可以解决  我晚上去试试  大家觉得是这个原因吗

我的确是没有赋初始值  直接set   i_sg=i_sg+1 了
回复

使用道具 举报

发表于 2010-12-1 10:16:21 | 显示全部楼层
在循环中使用么?如果是直接写的j,无初始赋值相当于随机值吧……
回复

使用道具 举报

发表于 2010-12-1 12:36:13 | 显示全部楼层
引用第7楼Conflux于2010-12-01 11:29发表的  :
整数和实数的初始值都是0,布尔是false,其他大多数类型的都是null。
没有初始值就不能赋值的说法是荒诞的。

不是哦,你去试一下局部变量操作,不赋初值去运算的话的确会出问题,并被打断在运算这一语句,初值并不是0,而是类似于undefine之类的
如果是WE生成的全局变量,整数实数会默认赋值为0,你也可以去改变他们的初值,但如果是自己手工添加的话,的确可能需要注意这个问题

扯开一下,在java中类成员如果不显示的初始化的话会像7楼所说的那样赋初值为0或null,但局部变量不会,并且不赋值直接使用连编译都过不了……
回复

使用道具 举报

发表于 2010-12-1 14:10:16 | 显示全部楼层
LZ滴编辑器是什么啊,LZ滴那种方法在一般编辑器里是不支持滴,一般编辑器在globals endglobals里面声明变量时是全局变量,名字前面需加udg_,就像下面那样。
[jass]globals
    // User-defined
    integer  udg_a = 0

    // Generated
    trigger  gg_trg________________u    = null
endglobals[/jass]
回复

使用道具 举报

发表于 2010-12-1 14:12:29 | 显示全部楼层
可能是直接改jass文件吧,不用触发编辑器啊WE之类的
回复

使用道具 举报

发表于 2010-12-1 14:13:41 | 显示全部楼层
额,这就不知道了...
回复

使用道具 举报

发表于 2010-12-1 14:16:01 | 显示全部楼层
我们用的不是C语言呀  C的编译机制中没有布尔变量 任何没有初始化的变量都会被系统RANDOM了
但是JASS 我也遇到过同样的问题 貌似就是初始化的问题  就是不知道JASS是怎么编译这句SET的 如果是按父类的类型来判断的话
那么 布尔和整数都会继承于 一个INT   那么 大家去试试 把2赋给布尔变量会怎么样  楼主初始化一下变量试试吧
我这只是简易的推测和判断  不过局部变量会有这种问题吗??
回复

使用道具 举报

发表于 2010-12-1 14:26:49 | 显示全部楼层
在支持vj或cj滴编辑器下,LZ滴方法globals endglobals可以放到任何地方,都能被调用。
前提是在编辑器里面写,不是在j文件,但如果LZ是通过生成后滴地图滴j文件来改滴话,应该也会udg_前缀滴吧!?...
回复

使用道具 举报

发表于 2010-12-1 14:30:34 | 显示全部楼层
Release版本未初始化应该都是归0吧,Random化应该是Debug版本造成的

或许是……这样?
int *t; /* t = 0 */
*t = *t + 1;
于是就死了……
回复

使用道具 举报

发表于 2010-12-1 14:31:58 | 显示全部楼层
引用第13楼pk321oo于2010-12-01 14:26发表的  :
在支持vj或cj滴编辑器下,LZ滴方法globals endglobals可以放到任何地方,都能被调用。
前提是在编辑器里面写,不是在j文件,但如果LZ是通过生成后滴地图滴j文件来改滴话,应该也会udg_前缀滴吧!?...

改的过程中自己再加入新的全局变量呢?那样的话不需要手动去加那个udg_的头的,
回复

使用道具 举报

发表于 2010-12-1 14:33:43 | 显示全部楼层
引用第15楼zhuzeitou于2010-12-01 14:31发表的  :


改的过程中自己再加入新的全局变量呢?那样的话不需要手动去加那个udg_的头的,

真滴!?这个不知道呢...不知道原来滴WE也能这么做...  

从没想过这个方法,改图就难说.....
回复

使用道具 举报

发表于 2010-12-1 14:36:11 | 显示全部楼层
引用第14楼zhuzeitou于2010-12-01 14:30发表的 :
Release版本未初始化应该都是归0吧,Random化应该是Debug版本造成的

或许是……这样?
int *t; /* t = 0 */
*t = *t + 1;
.......

真是大条 。。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2010-12-1 15:26:35 | 显示全部楼层
之前都不知道诶...
回复

使用道具 举报

发表于 2010-12-3 09:53:02 | 显示全部楼层
变量不赋值就直接参与计算好像确实是不行的,触发器走到那里就不动了。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 16:37 , Processed in 0.032909 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表