我没有对我的任何模块进行重大更改,但突然间它开始无法编译我的很多模块。
我收到以下错误
borders.d(190): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
borders.d(191): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\image.d(117): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\image.d(121): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\image.d(121): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(45): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(59): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(73): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(89): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(100): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\imagebutton.d(110): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
controls\labelbutton.d(78): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\labelbutton.d(89): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\textbox.d(245): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
controls\textbox.d(247): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
controls\textbox.d(259): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
controls\textbox.d(309): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\textbox.d(310): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
controls\textbox.d(324): Error: function aeri.context.Context.size (Point newSize) is not callable using argument types ()
controls\textbox.d(325): Error: function aeri.context.Context.position (Point newPosition) is not callable using argument types ()
只是为了展示导致它的原因的一个例子。以下是borders.d
this(Context parent, Paint topPaint, Paint rightPaint, Paint bottomPaint, Paint leftPaint) {
super();
if (!parent)
throw new BorderException("Pass a context to render the border around.");
m_parent = parent;
m_topPaint = topPaint;
m_rightPaint = rightPaint;
m_bottomPaint = bottomPaint;
m_leftPaint = leftPaint;
position = parent.position; // Line 190
size = parent.size; // Line 191
}
现在让我们看一下Context.position
和Context.size
override void size(Point newSize) {
super.size = newSize;
if (m_backgroundPaint != transparent) {
m_backgroundShape = new RectangleShape(Vector2f(cast(float)super.width, cast(float)super.height));
m_backgroundShape.fillColor = m_backgroundPaint.toSfmlColor();
m_backgroundShape.position = Vector2f(cast(float)super.x, cast(float)super.y);
}
if (m_border) {
m_border.size = Point(super.size);
}
}
override void position(Point newPosition) {
super.position = newPosition;
if (m_backgroundShape) {
m_backgroundShape.position = Vector2f(cast(float)super.x, cast(float)super.y);
}
if (m_border) {
m_border.position = Point(super.position);
}
}
那些是制定者。
Context
继承了一个名为Space
的类,它具有位置和大小的getter / setter。 Context
仅覆盖setter,但getter是相同的,应该从Space
调用。似乎甚至根本没有得到Space
的属性。正如你所看到的那样,当它应该得到吸气剂时它试图获得设定者。但是所有这些代码都可以使用。
以下是Space
中的属性。
Point position() { return m_position; }
void position(Point newPos) {
m_position = newPos;
}
Point size() { return m_size; }
void size(Point newSize) {
m_size = newSize;
}
注意:我会将以下所有属性包装起来,以防万一你想知道找不到@property
的原因。
@property {
// properties
}
我真的无法弄清楚是什么原因导致这种情况导致我认为它与编译器分析模块的顺序有关?
我仍在尝试自己解决这个问题,但是我无法发现错误,在Space
更改了一些行后,它们似乎都破了,但是没有成员。
如果您想知道image.d
中的错误,imagebutton.d
,labelbutton.d
和textbox.d
是由同一件事造成的。它们都继承Context
并覆盖大小/位置。
所以继承基本上是这样的:
x (ex. Image, ImageButton, LabelButton, TextBox etc.)
----Control
--------Context
------------Space
LabelButton
和ImageButton
继承了继承Button
的{{1}}。
Control
不会覆盖任何来自Control
的成员,因此对Context
的所有来电都会直接转到Control
。 Context
也是如此,除了它有一些用于处理鼠标事件的内部成员(在Button
中处理,但它会调用它。)
以下是Context
类和Control
类,以防万一。
Button
class Control : Context {
protected:
this(string name) {
super(name);
}
}
...
如果您需要更多信息或代码,请与我们联系。不过我认为这应该足够了。属性/属性调用的继承和覆盖在之前工作得很好。
答案 0 :(得分:0)
解决了这个问题,它似乎是一个编译器错误(或者至少它似乎不是一个正常的行为。)
我在position/size
内覆盖了来自Space
的{{1}}的设置者,因此编译器从不在Context
中寻找吸气剂,而是在Space
中寻找吸气剂
我要解决的问题是在Context
内覆盖了来自position/size
的{{1}}的getter。