2015-10-26 73 views
0

我有一个GUI list的回调函数,该函数也从我的工作区传入一个结构,以便在函数执行时更新/添加新值。不幸的是,当我尝试更新/添加到结构中时,什么也没有发生,就像它在空间中丢失一样。从GUI函数内更新结构句柄 - Matlab

这里是我的回调函数:

function guiUpload(upload_button_h, evt, text_h, list_h, tracks, predictions, models) 

// various other code... 

predictions.valence(end+1) = valence; 

end 

如果我参加和我的代码运行的脚本,而不是一个函数中也能正常工作。

回答

1

问题可能是您没有更改对象predictions的内容,而是对象的副本。为了更改变量predictions,您应该执行以下两项操作之一:

a)您将变量设置为全局变量。所以在函数内部发生的事情反映在外面。 注意:全局变量通常不是一个好习惯。

global predictions 
function guiUpload(upload_button_h, evt, text_h, list_h, tracks, models) 
// various other code... 
predictions.valence(end+1) = valence; 
end 

B)你的对象predictions是一个类的对象,所以你从handle使课堂的传承。然后你不复制这个对象,而是给出一个像指针一样的函数来访问它。

没有看到整个代码没有更多可以说。

+0

谢谢,可能有太多的代码,这就是为什么我保持我的帖子稀疏。另一方面,选项(a)在这个时候听起来是最实用的。您能指导我如何在我的工作空间中使我的预测结构全球化吗? – user1574598

+0

你只是在进入函数之前创建变量global,然后你不必像参数一样传递它,它将在任何地方都可以访问(这是什么使它成为一个不好的解决方案) – sebas

+0

啊,我明白了,类似于'php' 。不幸的是,我现在得到这个错误:'错误:文件:guiUpload.m行:3列:1,函数定义不允许在这种情况下.'我也确保'预测'已经被' 'uicontrol'对象的callback属性。我试着在函数内部移动'global'并得到这个错误:'尝试引用非结构数组的字段。' – user1574598