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

SDLTTF は GObject によって管理されていないため、Vala は派生クラスを作成できません。Vala は、GLib、GTK+、Pango、ATK、および多くの GNOME ライブラリで一般的であるように、GObject を使用する場合にのみ派生クラスを作成できます。

目的に応じて、SDLTFF.Font のインスタンスを含む新しいクラスを作成し、適切な要求をプロキシすることができます。

于 2012-09-19T22:29:57.433 に答える
3

入れてみましたか

base(_filename, _size);

あなたのコンストラクタで?

編集:これは私にとってはうまくいきました。ただし、SDLTTF.Font はコンパクトなクラスとして vapi で定義されていることに注意してください。つまり、それを派生させると、サブクラスの新しい関数を定義することしか許可されず、インスタンス データ (メンバー変数など) を定義することはできません。これが必要な場合は、apmasell の提案に従い、(G)Object から派生するラッパー クラスを作成することをお勧めします。

于 2012-09-19T21:14:22.070 に答える