不支持链达 'Gtk.Box.new'
Chain up to 'Gtk.Box.new' not supported
我是 Vala 的新手,到目前为止我认为它很酷,但我在理解继承方面遇到了困难。我读到 here 我应该使用 base()
来调用 parents 构造函数。好吧,很酷,似乎可以理解,但它对我不起作用。我一直在标题上收到错误。这是我要展示的片段:
public class MyBox : Gtk.Box {
public MyBox(Gtk.Orientation orientation, int spacing) {
// I have to this
this.set_orientation(orientation);
this.set_spacing(spacing);
// I want to do this:
base(orientation, spacing);
//workaround is this:
Object(orientation: orientation, spacing: spacing);
}
}
请帮助我理解为什么 Object(....) 有效但 base(...)
不应该是一样的吗?
这是由于 C 代码的实现。当 Vala 生成一个构造函数时,它会生成两个 C 函数,一个分配内存并调用 _construct
的 _new
函数和一个初始化对象的 _construct
函数。当您使用 base()
对基本构造函数进行 case 时,它需要一个匹配的 _construct
函数来调用。不是所有用 C 写的 classes 都有这个;在 VAPI 文件中,您会找到一些构造函数的 has_construct_function = false
。如果是这种情况,则无法进行连锁。基 GObject
可以通过参数设置属性,因此这成为在基 class.
中设置默认值的唯一方法
我是 Vala 的新手,到目前为止我认为它很酷,但我在理解继承方面遇到了困难。我读到 here 我应该使用 base()
来调用 parents 构造函数。好吧,很酷,似乎可以理解,但它对我不起作用。我一直在标题上收到错误。这是我要展示的片段:
public class MyBox : Gtk.Box {
public MyBox(Gtk.Orientation orientation, int spacing) {
// I have to this
this.set_orientation(orientation);
this.set_spacing(spacing);
// I want to do this:
base(orientation, spacing);
//workaround is this:
Object(orientation: orientation, spacing: spacing);
}
}
请帮助我理解为什么 Object(....) 有效但 base(...)
不应该是一样的吗?
这是由于 C 代码的实现。当 Vala 生成一个构造函数时,它会生成两个 C 函数,一个分配内存并调用 _construct
的 _new
函数和一个初始化对象的 _construct
函数。当您使用 base()
对基本构造函数进行 case 时,它需要一个匹配的 _construct
函数来调用。不是所有用 C 写的 classes 都有这个;在 VAPI 文件中,您会找到一些构造函数的 has_construct_function = false
。如果是这种情况,则无法进行连锁。基 GObject
可以通过参数设置属性,因此这成为在基 class.