-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];

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

您没有在类构造函数或方法中分配变量。

于 2012-08-15T18:24:49.927 回答
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 回答
2

这是因为您试图对类主体中的变量而不是方法中的变量进行操作。您的班级主体中应该只有几件事:

  1. 领域: int myField = 0;
  2. 方法: public void myMethod(){ }
  3. 构造函数/析构函数(只是一种特殊类型的方法):public MyClass(){}

因此,当编译器看到 a 之后的第一个单词;(意味着它是新代码行的第一个单词)时,它希望看到一个标识符,如public,static等,或 a Type,如int。因为它不是一个标识符,所以它寻找一个类型,因为它不是一个类型,你得到了你的错误。

希望能很好地解释它。

于 2012-08-15T18:27:57.317 回答
1

你不能做

resources[0] = "cities_wood";

在你的类定义中。在静态构造函数或使用列表初始化程序中执行此操作。

于 2012-08-15T18:25:19.677 回答
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 回答