我试图从继承类中调用超类构造函数。 matlab documentation中的官方语法是:
然而,编辑似乎警告说:
obj = obj@SuperClass(ArgumentList);
变量`obj`可能在定义之前使用。
此外,如果我尝试运行代码,我会收到错误"" @"的左操作数必须是方法名称。"
可能出现什么问题?
答案 0 :(得分:1)
我发现这是子类构造函数名称的拼写错误的结果。问题的最小重建如下:
classdef SuperDemo < handle
methods
function obj = SuperDemo(opt)
disp(['in super ', opt])
end
end
end
classdef SubDemo < SuperDemo
methods
function obj = SubDemoo(opt) % NOTICE THE TYPO SubDemoo
disp(['in sub ', opt])
obj = obj@SuperDemo(opt);
end
end
end
如果您致电s = SubDemo('hello')
,您将收到错误消息:
使用SubDemo时出错错误:文件:SubDemo.m行:5列:19“@” 在方法中,调用同名的超类方法 说方法@超类。 “@”的左操作数必须是方法 名。
此错误具有误导性,因为左操作数为obj
而非SubDemo
。
错误消息应该表明构造函数名称SubDemoo
与类名SubDemo
不同。