bizika 发表于 2009-8-21 21:40:20

【求助】帮忙看看这个文件有什么问题

这是自己做的一个风云系统里的文件。 这个文件是一个随机宝石文件,拿到后用命令qian <定制武器> with stone就可增加定制武器的属性。可以正常增加属性,但是问题在于不能成功存储,因此quit后再进来属性就又回去了。存储操作在文件的第75行:num = weapon->save();为了调试后面加了行输出,可以看出save()总是返回0. 但是用qian命令增加属性后,手工用 call <武器>->save()又可以正常保存。 麻烦哪位大侠给看看问题在哪里,怎么解决?多谢了!

bizika 发表于 2009-8-21 21:56:24

根据现象来看,很可能是权限的问题,就是不知道怎么解决它

ddid 发表于 2009-8-21 22:06:17

::init_item();

不明白这里的这个语句是啥意思,代码里也没有声明其原型,一般这里不应该是setup()的么?

bizika 发表于 2009-8-21 22:12:34

你把 ::init_item() 当成一个空函数好了

icer 发表于 2009-8-21 22:17:33

看下securityd的valid_write函数

bizika 发表于 2009-8-21 22:38:05

不是 securityd->valid_write() 的原因,因为在执行到 weapon->save() 时,根本就没有进入valid_write() 函数,而且在定制武器文件的.c文件中的 save()函数一开始设置检查点,发现根本没有进入这个save()函数,不知道这个 75行的 save() 函数指到哪里去了。。。

icer 发表于 2009-8-21 22:42:33

哦,刚才没看你的代码,你没有inherit F_SAVE,也没有写query_save_file()指定存盘文件,怎么存啊,call的时候save的文件在哪里设的?代码里没有啊

bizika 发表于 2009-8-21 23:03:53

终于解决问题了。。。。

问题在于weapon->save();和destruct(stone);的执行顺序上,如果先执行 destruct(stone),没有了stone(stone在这里是 this-object()),weapon这个局部变量也就没有了,weapon这个object就变成了NULL,当然也就没了save()函数,因此只要把两行代码调换一下次序,变成: weapon->save();destruct(stone); 就OK了。
页: [1]
查看完整版本: 【求助】帮忙看看这个文件有什么问题