-2

私はHaxeプログラミングの初心者です。プログラムをビルドすると、次のように出力されます。

Member variable initialization is not allowed outside of class constructor

初期化データメンバーを変更せずに、これを解決する方法を知っている人はいますか?

4

1 に答える 1

1

まず、使用しているHaxeのバージョンと、エラーを生成するソースコードを、できれば可能な限り最小の形式でお知らせいただけると助かります。

私がこれを言う理由は、最新のHaxeバージョン(3.0.1)がその正確なエラーメッセージを生成しないとかなり確信しているからです...私が間違っていない限り:)したがって、使用しているバージョンを知るのは難しく、難しいです問題が何であるかを知るために。

私の推測:許可されていないメンバー変数の初期化を使用しています。古いバージョンの Haxe ではまったく許可されていませんでしたが、Haxe 3 では「定数」値 (文字列、整数など) に対してのみ許可されていました。Haxe 3 で「変数の初期化は定数値でなければなりません」というエラー メッセージが表示されますが、バージョン間でエラー メッセージが変更されている可能性があります。

壊れたコード

class Initialization
{
    static function main() {
        new Initialization();
    }

    var myInt = 0;
    var myString = "some string";
    var myArray = [1,2,3]; // Error: "Variable initialization must be a constant value"

    public function new() {
        trace(myInt);
        trace(myString);
        trace(myArray);
    }
}

作業コード

class Initialization
{
    static function main() {
        new Initialization();
    }

    var myInt = 0;
    var myString = "some string";
    var myArray:Array<Int>; // Define the type, but don't initialize here

    public function new() {
        myArray = [1,2,3]; // Initialize in the constructor
        trace(myInt);
        trace(myString);
        trace(myArray);
    }
}

編集:ああ、あなたはHaxe 2.09を使用しています。あなたのためのインライン初期化はありません;)

class Initialization
{
    static function main() {
        new Initialization();
    }

    // Define the type, but don't initialize here
    var myInt:Int;
    var myString;
    var myArray:Array<Int>;

    public function new() {
        // Initialize in the constructor
        myInt = 0;
        myString = "some string";
        myArray = [1,2,3];
        trace(myInt);
        trace(myString);
        trace(myArray);
    }
}
于 2013-10-01T04:16:59.657 に答える