1

以下のようにいくつかのグローバル変数を定義するクラスがあります。

namespace Algo
{
    public static class AlgorithmParameters
    {
        public int pop_size = 100;

    }
}

main()を含む別のcsharpファイルと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

whileを使用する必要がある理由がわからない(true)

ただし、いずれの場合も、配列を宣言するには、次のことを行う必要があります。

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 に答える