1

私は以下のように私のプログラムで構造を使用しています:

public struct chromo_typ
{
        public string   bits;  
        public float    fitness;

        chromo_typ(string bts, float ftns)
        {
            bits = bts;
            fitness = ftns;
        }
};

main() で構造体、つまり chromo_typ(string bts, float ftns) で定義されたコンストラクターを使用しています。私の main() には次のコードが含まれています。

chromo_typ[] temp = new chromo_typ[VM_Placement.AlgorithmParameters.pop_size];

                    chromo_typ ct = new chromo_typ();

                    int cPop = 0;

                    //loop until we have created POP_SIZE new chromosomes
                    while (cPop < VM_Placement.AlgorithmParameters.pop_size)
                    {
                        // we are going to create the new population by grabbing members of the old population
                        // two at a time via roulette wheel selection.
                        string offspring1 = p.Roulette(TotalFitness, Population);
                        string offspring2 = p.Roulette(TotalFitness, Population);

                        //add crossover dependent on the crossover rate
                        p.Crossover(offspring1, offspring2);

                        //now mutate dependent on the mutation rate
                        p.Mutate(offspring1);
                        p.Mutate(offspring2);

                        //add these offspring to the new population. (assigning zero as their
                        //fitness scores)
                        temp[cPop++] = ct.chromo_typ(offspring1, 0.0f);
                        temp[cPop++] = ct.chromo_typ(offspring2, 0.0f);

                    }//end loop

と で次のエラーが表示されtemp[cPop++] = ct.chromo_typ(offspring1, 0.0f);ますtemp[cPop++] = ct.chromo_typ(offspring2, 0.0f);

エラー:'VM_Placement.Program.chromo_typ' does not contain a definition for 'chromo_typ' and no extension method 'chromo_typ' accepting a first argument of type 'VM_Placement.Program.chromo_typ' could be found (are you missing a using directive or an assembly reference?)

構造を間違って使用していますか? どうすればこれを解決できますか?

4

1 に答える 1

5

この場合、chromo_typはコンストラクターですが、インスタンスメソッドとして呼び出しています。コンストラクターは、オブジェクトを構築するために使用されます。

temp[cPop++] = new chromo_typ(arg1, arg2);

これは、自分のタイプのインスタンスで呼び出すことができるメソッドではありません。

ちなみに、C#で型に名前を付ける標準的な方法は、大文字で始まり、キャメルケースを使用することです。

public struct ChromoTyp { }

もちろん、これはルールではありませんが、通常、コミュニティですでに使用されているパターンに従うことをお勧めします。

于 2012-04-22T19:43:15.800 に答える