-2

重複の可能性:
(オブジェクト) は「フィールド」ですが、「タイプ」のように使用されます

タイトルから推測できるように、次のエラーが発生しています。

Invasion_server.variables.resources is a field but is used like a type

そのエラーを私に与えているコードは次のとおりです。

class variables
{
    ....
    public static string[] resources = new string[30];
    resources[0] = "cities_wood";
    ....
}

コードの他の場所で機能しているため、誰かが問題の原因を教えてください...

4

6 に答える 6

4

何らかの方法でこれを行う必要があります

于 2012-08-15T18:23:09.600 に答える
3

コンストラクターまたはメソッド本体の外で配列のメンバーを初期化したい場合は、初期化構文と宣言を使用して行う必要があります。

class variables
{ 
  public static string[] resources = new string[30] 
  { 
    "item one",
    "item two",
    ...
  }
}

そうすることの欠点は、30 個の値すべてを入力する必要があることです。最初のものだけを設定する場合は、コンストラクターまたはメソッド本体で行う必要があります。宣言されたときに初期化するのと同じ正味の効果を持つ静的コンストラクターを検討できます。静的コンストラクターは、クラスのメンバーが初めてアクセスされたときに実行されます。例えば:

class variables
{
  public static string[] resources;

  static variables()
  {
    resources = new string[30];
    resources[0] = "item one";
  }
}
于 2012-08-15T18:32:33.633 に答える
3

これを試して:

class variables
{
    public static string[] resources = new string[30];

    static void doSomething() {
        resources[0] = "cities_wood";
    }
}

クラスコンストラクターまたはメソッド内で変数を割り当てていませんでした。

于 2012-08-15T18:24:49.927 に答える
2

メソッドではなく、クラス本体で変数を操作しようとしているからです。クラス本体にはいくつかのものだけを含める必要があります。

  1. 田畑: int myField = 0;
  2. 方法: public void myMethod(){ }
  3. コンストラクタ/デストラクタ (特殊なタイプのメソッド):public MyClass(){}

そのため、コンパイラが a に続く最初の単語 (新しいコード行の最初の単語であることを意味します) を検出した場合、コンパイラは、、 などのような識別子または 、 のよう;な のいずれかを検出することを期待します。識別子ではないため、型を探しましたが、型ではないため、エラーが発生しました。publicstaticTypeint

それがかなりよく説明されていることを願っています。

于 2012-08-15T18:27:57.317 に答える
1

メソッドまたはコンストラクターでフィールドを初期化するか、次のような宣言ですべてを初期化する必要があります

class variables

    {
         public static string[] resources = new string[30];

        public variables()
        { 
           resources[0] = "cities_wood";
        }
    }

また

 public static string[] resources = {"cities_wood", "....", "more stuff", "and more stuff"};//Your 30 or les or more variables separated by a comma
于 2012-08-15T18:26:10.100 に答える
1

あなたにはできない

resources[0] = "cities_wood";

クラス定義で。静的コンストラクターで行うか、リスト初期化子を使用してください。

于 2012-08-15T18:25:19.677 に答える