我有一个定义了几个全局变量的类,如下所示:
namespace Algo
{
public static class AlgorithmParameters
{
public int pop_size = 100;
}
}
在我的另一个csharp文件中,它还包含main(),在main()中我声明了一个类型结构数组,数组大小为pop_size,但我在"chromo_typ Population[AlgorithmParameters.pop_size];"
上收到了一些错误。请在下面找到代码。我对可变长度大小的数组声明使用了不正确的语法吗?
namespace Algo
{
class Program
{
struct chromo_typ
{
string bits;
float fitness;
chromo_typ() {
bits = "";
fitness = 0.0f;
}
chromo_typ(string bts, float ftns)
{
bits = bts;
fitness = ftns;
}
};
static void Main(string[] args)
{
while (true)
{
chromo_typ Population[AlgorithmParameters.pop_size];
}
}
}
}
错误是:
Bad array declarator: To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type.
Array size cannot be specified in a variable declaration (try initializing with a 'new' expression)
请帮忙。
答案 0 :(得分:8)
在声明变量时没有指定大小,在创建数组实例时指定它:
chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];
或者如果您将声明和创作分开:
chromo_typ[] Population;
Population = new chromo_typ[AlgorithmParameters.pop_size];
答案 1 :(得分:2)
以这种方式更改初始化:
//while (true) ///??? what is the reason for this infinite loop ???
//{
chromo_typ[] Population = new chrom_typ[AlgorithmParameters.pop_size] ;
//}
您还需要将pop_size更改为静态,因为它是在静态类中声明的。
答案 2 :(得分:1)
不确定为什么你必须使用while(true)
但无论如何,要声明数组,你必须这样做:
chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];
并且您还必须在AlgorithmParameters
中将成员pop_size声明为staticpublic static class AlgorithmParameters
{
public static int pop_size = 100;
}