1

我有一个类,它定义了几个全局变量,如下所示:

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)

请帮忙。

4

3 回答 3

9

声明变量时不指定大小,而是在创建数组实例时指定它:

chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];

或者,如果您将声明和创建分开:

chromo_typ[] Population;
Population = new chromo_typ[AlgorithmParameters.pop_size];
于 2012-04-21T23:04:04.917 回答
2

以这种方式更改初始化:

        //while (true) ///??? what is the reason for this infinite loop ???
        //{ 
            chromo_typ[] Population = new chrom_typ[AlgorithmParameters.pop_size] ; 
        //} 

您还需要将 pop_size 更改为静态,因为在静态类中声明。

于 2012-04-21T23:05:10.487 回答
1

不知道为什么你必须使用一段时间(真)

但无论如何,要声明数组,您必须这样做:

chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];

而且您还必须在 AlgorithmParameters 中将成员 pop_size 声明为静态

public static class AlgorithmParameters
{
     public static int pop_size = 100;
}
于 2012-04-21T23:16:17.017 回答