我想从一个类调用一个方法。例如,我有:
classdef SweepLine
properties
y;
count;
sections;
end
methods
function obj = SweepLine(y)
obj.y = y;
obj.count = 0;
end
function AddSection(obj, section)
obj.count = obj.count + 1;
fprintf('%d\n', obj.count);
fprintf('Indext is: %d\n', section.index);
obj.sections(obj.count) = section;
end
end
end
当我在不同的脚本中调用方法AddSection
时,如下所示:
AddSection(sweepLine, Sections(i)); % Sections contains 10 section objects
我收到了这个错误:
The following error occurred converting from Section to double:
Error using double
Conversion to double from Section is not possible.
Error in SweepLine/AddSection (line 20)
obj.sections(obj.count) = section;
我想这是因为我没有进行内存预分配,但我仍然不确定。 我刚从Java转到MATLAB OOP,觉得有很多东西很难搞定。
非常感谢有关此问题和MATLAB编程的任何帮助!
答案 0 :(得分:1)
看起来您正在尝试将sections
数组与新值连接起来。执行此操作时,您假设已经分配了obj.sections
,并且通过执行该分配,您将收到该错误。因此,您怀疑的是正确的。要解决此问题,请尝试在您的AddSections
方法中为您的课程执行此语句:
obj.sections = [obj.sections section];
这会将section
与当前建立的obj.sections
连接起来。这实质上将section
添加到数组的末尾,这是您之前的代码正在执行的操作。这对于空数组和已分配的数组都是安全的。
我还建议您的SweepLine
类继承自handle
类。我假设当您致电AddSection
时,不希望退回该对象。你只想修改对象,什么也不返回......对吗?如果是这种情况,那么必须继承handle
类。但是,如果在每次方法调用后返回对象的当前实例,则不需要这样做。
无论如何,你应该这样做:
classdef SweepLine < handle
properties
y;
count;
sections;
end
methods
function obj = SweepLine(y)
obj.y = y;
obj.count = 0;
end
function AddSection(obj, section)
obj.count = obj.count + 1;
fprintf('%d\n', obj.count);
fprintf('Index is: %d\n', section.index);
obj.sections = [obj.sections section];
end
end
end