原本保存为XXX的变量YYY无法实例化为对象,会读入为uint32

Variable YYY originally saved as a XXX cannot be instantiated as an object and will be read in as a uint32

我犯了一个错误,用我找不到的 class 定义记录了一堆重要数据。方法不重要,我只要数据;结构转换就可以了。

有什么方法可以恢复吗?

谷歌搜索没有帮助。

解决方案是创建一个新的 class 来重载 loadobj method. See here,以获取有关 classes 的加载过程的更多信息。

我通过创建 class:

复制了你的问题
classdef myclass
   properties
      Prop1
      Prop2
      Prop3
   end
   methods
       function obj = myclass(a,b,c)
           obj.Prop1 = a;
           obj.Prop2 = b;
           obj.Prop3 = c;
       end
   end
end

然后我创建了这个 class 的对象并将其保存到文件 "x.mat":

x = myclass('a',56,[1,2,3]);
save x

接下来,我删除了 myclass 文件并做了 clear classes。这让我遇到了你的情况。

然后我创建了一个新的 myclass class 来重载 loadobj 方法:

classdef myclass
   properties
       data
   end
   methods (Static)
       function obj = loadobj(s)
           obj = myclass;
           obj.data = s;
       end
   end
end

注意它是如何不知道任何原始属性的。这没关系。如果从 MAT 文件加载对象时缺少任何原始属性,将调用 loadobjs 是包含原始对象所有属性的 struct

使用这个新的 class 定义,load x 创建了 class myclass 的对象 x,其中 x.data 是一个包含"x.mat".

中保存的对象的属性