2 Stimmen

Arrays mit variabler Länge in C#

Ich habe eine Klasse, die einige globale Variablen wie unten definiert:

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

    }
}

In meiner anderen csharp-Datei, die auch die main() enthält, und in der main() deklariere ich ein Array vom Typ Struktur und die Array-Größe als pop_size, aber ich erhalte einige Fehler auf "chromo_typ Population[AlgorithmParameters.pop_size];" . Bitte finden Sie den Code unten. Verwende ich eine falsche Syntax für Array-Deklarationen mit variabler Länge?

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];
            }
        }
    }
}

Fehler ist:

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)

Bitte um Hilfe.

12voto

Guffa Punkte 663241

Sie geben die Größe nicht an, wenn Sie die Variable deklarieren, sondern wenn Sie die Instanz des Arrays erstellen:

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

Oder wenn Sie die Erklärung und die Erstellung trennen:

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

2voto

Steve Punkte 208036

Ändern Sie die Initialisierung auf diese Weise:

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

Außerdem müssen Sie pop_size in ein static ändern, da es innerhalb einer statischen Klasse deklariert ist.

1voto

ninja Punkte 106

Ich weiß nicht, warum Sie ein while(true) verwenden müssen.

Aber um ein Array zu deklarieren, müssen Sie dies auf jeden Fall tun:

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

und Sie müssen auch das Mitglied pop_size als statisch in AlgorithmParameters deklarieren

public static class AlgorithmParameters
{
     public static int pop_size = 100;
}

0voto

Monukumar S Punkte 1

Versuchen Sie, die Initialisierungsanweisung wie folgt zu ändern, dann wird eine Instanz erstellt

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X