3

Visual Studio C#ExpressとXna4.0を使用しています

了解しました。私はアマチュアプログラマーであり、おそらくこれを最善の方法で行っているわけではないので、より良い方法を示して問題を解決したい場合は、それは素晴らしいことです。

私の問題は、このコードを実行したときに理解できないエラーが発生することです。

これは私が使用しているクラスです。問題はここにはありませんが、これは重要です。

class ShipType
{
    public Vector2 Size;
    public int LogSlots;
    public int DefSlots;
    public int OffSlots;
    public int SpecSlots;

    public int HullBase;
    public int TechCapacity;
    public int EnergyCapacity;
    public int WeightBase;
    public string Class;
    public string Manufacturer;
    public string Description;

    public void Initialize(
        ref Vector2 Size,
        ref int LogSlots, ref int DefSlots, ref int OffSlots, 
        ref int SpecSlots, ref int HullBase, ref int TechCapacity, 
        ref int EnergyCapacity, ref int WeightBase,
        ref string Class, ref string Manufacturer, ref string Description)
    {

    }
}

ここで問題が発生します。Initializeメソッドを実行すると、エラーが発生します。

class AOSEngine
{
    public Player PlayerA = new Player();
    public List<ShipType> ShipTypeList = new List<ShipType>(10);

    public void Initialize()
    {
        //Build Ship Type List
        ShipTypeList = new List<ShipType>(10);
        ShipTypeList.Add(new ShipType());
        ShipTypeList[0].Initialize(new Vector2(0, 0), 4, 4, 4, 4, 
                                   100, 100, 100, 10, "Cruiser", 
                                   "SpeedLight", "");

    }
}

このエラーは、Initialize Lineの実行時に発生し、次のようになります。

のベストオーバーロードメソッドマッチにAOS.ShipType.Initialize(ref Vector2 Size, ... ref string Description)は、いくつかの無効な引数があります。

繰り返しになりますが、私はおそらくこれをうまくやっていなかったので、もっとうまくやるための提案があれば、それを聞きたいと思います。

4

1 に答える 1

2

パラメータを として宣言したので、変数を渡すときにキーワードrefを使用する必要があります。ref

ShipTypeList[0].Initialize(ref new Vector2(0, 0),ref 4,ref 4,ref 4,ref 4,ref 100,ref 100,ref 100,ref 10,ref "Cruiser",ref "SpeedLight",ref "");

とは言っても、ここで ref パラメーターを使用する正当な理由はありませんref。Initlialize() メソッドからキーワードを削除したほうがよいでしょう。

public void Initialize(
     Vector2 Size,
     int LogSlots,  int DefSlots,  int OffSlots,  int SpecSlots,
     int HullBase,  int TechCapacity,  int EnergyCapacity,  int WeightBase,
     string Class,  string Manufacturer,  string Description)
{
    this.LogSlots = LogSlots;
    this.DefSlots = DefSlots;
    //...etc...
}

ref を使用する理由と方法の詳細については、Jon Skeets の記事を参照してください: http://www.yoda.arachsys.com/csharp/parameters.html

于 2012-12-14T04:15:56.370 に答える