解决错误信息:无效的属性在类的默认值:不能使用常量属性在类的定义。

6视图(30天)
你好,
我遇到这个错误:
错误使用十六进制
无效的默认值属性的“方向”类“六角”:
常数属性“方向”类十六进制不能用于自己的定义。
在使用下面的类定义。但是我有可靠地重建错误相当多的困难。创建类的实例时触发。有时我可以注释掉一些方法和创建一个对象的运行顺利,然后我可以再次引入方法逐行,直到它是一样的评论之前,仍将是没有错误。
我知道,问题是这里有点模糊,如果任何人都可以阐明什么可能会导致这个错误将不胜感激。
目前,如果我注释掉的行定义了“对角线”然后我可以打电话给一个类如下所示:
> >十六进制(2,2,4)
ans =
十六进制属性:
问:2
r: 2
s: 4
地址:“2.2.-4”
方向:{6×1细胞}
如果这条线
对角线={十六进制(2,1,1);十六进制(1、2、1);十六进制(1,1,2);十六进制(2,1,1);十六进制(1、2、1);十六进制(1,1,2)};
仍然是注释,然后我得到错误:
> >十六进制(2,2,4)
错误使用十六进制
无效的默认值属性的“方向”类“六角”:
常数属性“方向”类十六进制不能用于自己的定义。
我能访问“方向”房地产当一个类:
> >十六进制(2,2,4).directions {1}
ans =
十六进制属性:
问:1
r: 0
s: 1
地址:“1.0.-1”
方向:{6×1细胞}
所以我认为“对角线”的线应该是相同的。我有点迷惑。
这是我的类:
classdef十六进制
属性(SetAccess =不可变)
r
年代
地址
结束
属性(常量)
方向={十六进制(1,0,- 1),十六进制(1 1 0);十六进制(0,1,1);十六进制(1,0,- 1),十六进制(1 1 0);十六进制(0,1,1)};
对角线={十六进制(2,1,1);十六进制(1、2、1);十六进制(1,1,2);十六进制(2,1,1);十六进制(1、2、1);十六进制(1,1,2)};
结束
方法
函数obj =十六进制(q, r, s)
断言(q + r + s = = 0,“无效的十六进制坐标。”);
obj。问= q;
obj。r= r;
obj。年代= s;
obj。地址= char(字符串(obj.q) +“。”字符串(obj.r) + +“。”+字符串(对象));
结束
函数e = eq(其中obj1 methoda)
如果长度(长度(其中obj1) > 1 | | methoda () > 1)
味精=“不能目前比较两个列表的六角形。”;
断言(长度(其中obj1) = = 1 | |长度(methoda) = = 1), msg);
如果(长度(其中obj1) > 1)
temp = methoda;
methoda =其中obj1;
其中obj1 = temp;
结束
i = 1:长度methoda ()
如果(其中obj1 = = methoda(我))
e (i) = true;
其他的
e (i) = false;
结束
结束
其他的
如果(其中obj1。问== obj2.q && obj1.r == obj2.r && obj1.s == obj2.s)
e = true;
其他的
e = false;
结束
结束
结束
函数e = ne(其中obj1 methoda)
如果(其中obj1。问== obj2.q && obj1.r == obj2.r && obj1.s == obj2.s)
e = true;
其他的
e = false;
结束
结束
函数十六进制= hex_add (A, B)
十六进制=十六进制(A.q + B.q A.r + B.r,其子as +常规);
结束
函数十六进制= hex_subtract (A, B)
十六进制=十六进制(A.q-B.q A.r-B.r A.s-B.s);
结束
函数十六进制= hex_multiply (k)
十六进制=十六进制(A.q * k, A.r * k,其子as * k);
结束
函数ln = hex_length (A)
ln = max ([abs (A.q), abs (A.r), abs(其子as)]);
结束
函数d = hex_distance (A, B)
d = hex_length (hex_subtract (A, B));
结束
函数邻居= hex_neighbour(十六进制、方向)
邻居= hex_add(十六进制,hex.hex_direction(方向));
结束
函数邻居= hex_diagonal_neighbour(十六进制、方向)
邻居= hex_add(十六进制,Hex.diagonals{方向});
结束
函数布局点= to_pixel(十六进制)
M = layout.orientation;
x = (M。f1 *十六进制。q + M。f2 * * layout.size.x hex.r);
y = (M。f3 *十六进制。q + M。f4 * * layout.size.y hex.r);
点=点(x + layout.origin。x, y + layout.origin.y);
结束
函数布局角落= polygon_corners(十六进制)
中心= hex.to_pixel(布局);
角落(1:6)=点(0,0);
i = 0:6
抵消= Hex.corner_offset(布局、我);
角落(i + 1) =(点(中心。x +偏移量。x,中心。y + offset.y));
结束
结束
函数fracHex = hex_linearly_interpolate (A、B、t)
fracHex = FractionalHex (Hex.linearly_interpolate (A.q B.q t), Hex.linearly_interpolate (A.r B.r t), Hex.linearly_interpolate(其子as,本科,t));
结束
函数hexList =画线(A, B)
N = A.hex_distance (B);
hexList =十六进制(0,0,0);
一步= 1 / max (N, 1);
我= 0:N
hexList (i + 1) = hex_round (hex_linearly_interpolate (A, B,步骤*我));
结束
结束
函数offsetCoord = cube_to_oddr(十六进制)
坳=十六进制。q +(十六进制。r-(mod(hex.r,2))) / 2;
行= hex.r;
offsetCoord =(行、列);
结束
函数十六进制= hex_scale(十六进制因素)
十六进制=十六进制(十六进制。问* factor, hex.r * factor, hex.s * factor);
结束
结束
方法(静态)
函数方向= hex_direction (dir)
dir = mod (dir, 6) + 1;
方向= Hex.directions {dir};
结束
函数fracHex = pixel_to_hex(布局、点)
M = layout.orientation;
pt =点(点。x - layout.origin.x) / layout.size。x(点。y - layout.origin.y) / layout.size.y);
q = M。b1 * pt.x + M。b2 * pt.y;
r = M。b3 * pt.x + M。b4 * pt.y;
s = 0 - q - r;
fracHex = FractionalHex (q, r, s);
结束
函数角点= corner_offset(布局)
大小= layout.size;
角= 2 *π* (layout.orientation。startAngle +角落)/ 6;
点=点(大小。x * cos(角),大小。y * sin(角));
结束
函数c = linearly_interpolate (a、b、t)
c = * (1 - t) + b * t;
结束
函数十六进制= oddr_to_cube(坳,行)
q = col -行- (mod(行,2)))/ 2;
r =行;
s = 0 - q - r;
十六进制=十六进制(q, r, s);
结束
结束
结束

接受的答案

Joes Edders”类=
Joes Edders 2022年6月2日
我相信我现在已经发现的原因。
我没有将十六进制类定义为一个处理类。
classdef十六进制<处理
按照文档 在这里,
你可以分配一个常量属性定义类的实例。MATLAB创建实例分配常数财产当加载类。使用这种技术只有当定义类是一个 处理 类。

更多的答案(0)

s manbetx 845


释放

R2021b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!