1
public class Font : SDLTTF.Font {
    public Font (string _filename, int _size) {

    }

    public void draw () {

    }
}

那是我的代码。当我尝试构建它时,我得到:

Font.vala:4.5-4.15: error: unable to chain up to base constructor requiring arguments
    public Font (string _filename, int _size) {
    ^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)

我以为我需要重写构造函数,所以我尝试了public override它,但现在我得到了:

Font.vala:4.5-4.24: error: abstract, virtual, and override modifiers are not applicable to creation methods
    public override Font (string _filename, int _size) {
    ^^^^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)

有想法该怎么解决这个吗?我正在尝试继承 SDLTTF.Font 类。

4

2 回答 2

3

你试过把

base(_filename, _size);

在你的构造函数中?

编辑:这对我有用。但是请注意,SDLTTF.Font 在 vapi 中定义为紧凑类,这意味着当您派生它时,您只能为您的子类定义新函数,但不能定义实例数据(成员变量等)。如果你需要这个,我建议你按照 apmasell 的建议去创建一个从 (G)Object 派生的包装类。

于 2012-09-19T21:14:22.070 回答
3

SDLTTF 不由 GObject 管理,因此 Vala 无法创建派生类。Vala 只有使用 GObject 才能创建派生类,这在 GLib、GTK+、Pango、ATK 和许多 GNOME 库中很常见。

根据您想要做什么,您可以创建一个包含 SDLTFF.Font 实例的新类并代理适当的请求。

于 2012-09-19T22:29:57.433 回答