7

フォームの読み込み時に、次のコードがあります。

    private void Form1_Load(object sender, EventArgs e)
    {
        CharityCyclists cyclist1 = new CharityCyclists();
        CharityCyclists cyclist2 = new CharityCyclists("a", 1, "Finished", 0, 0, 0, "One Wheel", 1, 500);

        cyclist1.Type = "Novelty Charity Cyclist";
        cyclist1.Number = 1;
        cyclist1.Finished = "Not Finished";
        cyclist1.Hours = 0;
        cyclist1.Mins = 0;
        cyclist1.Secs = 0;
        cyclist1.Bicycle = "Tricycle";
        cyclist1.Wheels = 3;
        cyclist1.FundsRaised = 300;
    }

ただし、「'CycleEvent.CharityCyclists' には、0 引数を取るコンストラクターが含まれていません」というエラーが表示されます。エラーは、コードのこの部分に関係しているとのことです。

CharityCyclists cyclist1 = new CharityCyclists();

これが私のCharityCyclistsクラスです:

class CharityCyclists : Cyclists
{
    private string bicycle;
    private int wheels;
    private double fundsRaised;

    public string Bicycle
    {
        get { return bicycle; }
        set { bicycle = value; }
    }

    public int Wheels
    {
        get { return wheels; }
        set { wheels = value; }
    }

    public double FundsRaised
    {
        get { return fundsRaised; }
        set { fundsRaised = value; }
    }

    public CharityCyclists(String type, int number, String finished, int hours, int mins, int secs, string bicycle, int wheels, double fundsRaised) : base(type, number, finished, hours, mins, secs, fundsRaised)
    {
        this.bicycle = bicycle;
        this.wheels = wheels;
        this.FundsRaised = fundsRaised;
    }

    public override string ToString()
    {
        return base.ToString() + " riding a " + bicycle + " with " + wheels + " wheels" ;
    }
}

ありがとう!

4

10 に答える 10

18

これは、CharityCyclistsクラスに引数を取らないコンストラクターがないためです。

他のコンストラクターを定義しない場合、C# コンパイラーはデフォルトのコンストラクターを生成します。コンストラクターを自分で定義した場合 (そうであるように)、C# コンパイラーはデフォルトのコンストラクターを生成しません。

パラメータなしで構築できるようCharityCyclistsにする場合は、次のコードをクラスに追加します。

public CharityCyclists() 
{}
于 2012-11-06T21:54:13.663 に答える
2

引数を取るクラスのコンストラクターを提供した場合、コンパイラーは空のコンストラクターを作成しなくなりました。

したがって、空のコンストラクターは存在しないため、呼び出すことはできません。クラスのコードで、0 引数を取るコンストラクターを明示的に記述する必要があります。

于 2012-11-06T21:59:00.390 に答える
1

引数を持たないそのクラスのコンストラクターがありません。あなたが持っている唯一のコンストラクターはパラメーターを取ります。これをクラスに追加します。

public CharityCyclists() { } 
于 2012-11-06T22:02:18.947 に答える
1

0 引数を含まないコンストラクターを作成すると、既定のコンストラクターが自動的に削除されます。新しいデフォルト コンストラクター (引数なし) を作成する必要があります。これで問題が解決されます。

于 2012-11-06T21:55:00.147 に答える
1

コンストラクターがない場合、C# は暗黙的に空のコンストラクターを作成します。機能的には、あなたが書いているのと同じです:

public CharityCyclists()
{
}

ただし、コンストラクターがない場合にのみこれを行います。あなたはそれを持っているので、これは起こりません。パラメータを取らないコンストラクタを明示的に作成する必要があります。

于 2012-11-06T21:55:25.903 に答える
1

コンストラクターを宣言した場合、クラスはデフォルトのコンストラクターを自動的に取得しません。問題を解決するには、パラメーターなしのコンストラクターを作成するか、パラメーターを受け入れるコンストラクターを呼び出す必要があります。

于 2012-11-06T21:54:01.390 に答える
1

引数を取らないコンストラクターはありません。

追加する必要があります

public CharityCyclists()
{
    this.bicycle = "bike";
    this.wheels = 2;
    this.FundsRaised = 0;
}

またはそのようなもの

于 2012-11-06T21:54:06.847 に答える
0

CharityCyclistsこれをクラスに追加します。

public CharityCyclists()
{
}

次の行をコーディングすることはできません。

CharityCyclists cyclist1 = new CharityCyclists();

そのコンストラクタがない限り。

于 2012-11-06T21:55:56.310 に答える
0

.NET では、他のコンストラクターが宣言されていない場合、引数なし (パラメーターなし) コンストラクターが暗黙的に存在します。パラメーターを使用してコンストラクターを宣言したら、コードのコンパイルを続行するには、パラメーターを使用しない別のコンストラクターも明示的に宣言する必要があります。

于 2012-11-06T21:56:24.843 に答える
0

引数なしで CharityCyclists クラスのインスタンスである cyclelist1 をインスタンス化しようとしています。これには、引数なしのコンストラクターが必要です。

しかし、CharityCyclists クラスの定義には、9 つ​​の引数を持つコンストラクターが 1 つしかありません。そのコンストラクターには 9 つの引数が必要なため、cyclist1 はそのコンストラクターと一致しません。次のように、引数を取らないコンストラクターが必要です。

public CharityCyclists()
{
    this.bicycle ="";
    this.wheels = 0;       
    this.FundsRaised = 0.0;
}
于 2012-11-06T21:57:25.897 に答える