正如你可能从标题中猜到的那样,我收到了这个错误:
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";
....
}
有人可以告诉我导致问题的原因,因为代码中的其他地方正在运行......
答案 0 :(得分:4)
你应该用某种方法
来做这件事答案 1 :(得分:3)
试试这个:
class variables
{
public static string[] resources = new string[30];
static void doSomething() {
resources[0] = "cities_wood";
}
}
您没有在类构造函数或方法中分配变量。
答案 2 :(得分: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";
}
}
答案 3 :(得分:2)
这是因为你试图对类体中的变量进行操作,而不是在方法中。你的课堂上应该只有几件东西:
int myField = 0;
public void myMethod(){ }
public MyClass(){}
因此,当编译器看到;
之后的第一个单词(意味着它是新代码行的第一个单词)时,它希望看到像public
这样的标识符,static
等,或Type
,如int
。由于它不是标识符,因此它查找了一个类型,因为它不是一个类型,所以你得到了错误。
希望能很好地解释它。
答案 4 :(得分:1)
你做不到
resources[0] = "cities_wood";
在您的班级定义中。在静态构造函数中或使用列表初始化程序。
答案 5 :(得分:1)
您必须初始化方法或构造函数中的字段或声明中的所有字段,如
class variables
{
public static string[] resources = new string[30];
public variables()
{
resources[0] = "cities_wood";
}
}
OR
public static string[] resources = {"cities_wood", "....", "more stuff", "and more stuff"};//Your 30 or les or more variables separated by a comma