2

だから私はこの本でC#をたどってきました。

http://www.robmiles.com/c-yellow-book/Rob%20Miles%20CSharp%20Yellow%20Book%202011.pdf ページ 81-82 そこからこのコードを取得し、82 ページから別のメソッドを追加すると、次のようになります。

using System;      

enum AccountState
{
    New,
    Active,
    UnderAudit,
    Frozen,
    Closed
};

struct Account
{
    public AccountState State;
    public string Name;
    public string Address;
    public int AccountNumber;
    public int Balance;
    public int Overdraft;
};
class Bankprogram
{
    public static void Main()
    {   
        Account RobsAccount;    
        RobsAccount.State = AccountState.Active;    
        RobsAccount.Name = "Rob Miles";    
        RobsAccount.AccountNumber = 1234;    
        RobsAccount.Address = "his home";       
        RobsAccount.Balance = 0;    
        RobsAccount.Overdraft = -1;    
        Console.WriteLine("name is " + RobsAccount.Name);    
        Console.WriteLine("balance is : " + RobsAccount.Balance );      
    }
    public void PrintAccount(Account a)
    {
        Console.WriteLine ("Name" + a.Name);    
        Console.WriteLine ("Address :" + a.Address);    
        Console.WriteLine ("Balance:" + a.Balance);
    }

    PrintAccount(RobsAccount);
}

しかし、エラーが発生します: メソッドには戻り値の型が必要です。「PrintAccount(RobAccount);」を参照

この質問が以前に尋ねられたことは知っていますが、どれも私の問題に似ていませんでした。

4

7 に答える 7

8

問題は、コンパイラがそれPrintAccount(RobsAccount);がメソッド定義であると考えていることです。そのため、戻り型が必要です。

そのメソッドを別のメソッド内で呼び出す必要があります。voidで呼び出すことはできません。

于 2012-08-16T19:19:00.107 に答える
4

2つの問題があります

問題1:メソッド呼び出しがクラス内に直接あります。メソッド内にある必要があります。メソッドを呼び出すのではなく、クラスで宣言します。

問題2:静的メソッドは静的メソッド内で呼び出されるため、PrintAccountメソッドも静的である必要があります。

解決策:これはクラス構造である必要があります。

//Previous code as it is
class Bankprogram
{
    public static void Main()
    {   
        //Previous code as it is
        PrintAccount(RobsAccount);
    }
    public static void PrintAccount(Account a)
    {
        //Method code as it is
    }  
}
于 2012-08-16T19:19:35.130 に答える
1
PrintAccount(RobsAccount);

その関数が正確に呼び出されるのはいつですか?クラス定義の途中でそれを落としました(これがエラーが発生する理由です)。プログラムの開始時に呼び出されると思いますか? クラスの最初のインスタンスが作成されたとき? 意味がありません。クラスはオブジェクトのテンプレートです。

メソッドを呼び出したい場合は、別のメソッドから呼び出す必要があります (ここでは静的初期化は別として)。したがって、その行を削除してから、メインで...

static void Main(...) 
{
    PrintAccount();
}

また、あなたのデザインは非常に奇妙であることに注意してください。クラス内で main を定義しておりBankprogram(なぜですか?)、すべてが静的です。アカウントのすべてのプロパティがハードコードされている 1 つのアカウントのみを許可するつもりですか? あまり役に立たないようです。

于 2012-08-16T19:23:36.787 に答える
0

まず第一に、あなたはPrintAccount()他のメソッドの外でメソッドを呼び出そうとしています!タイプミスのようです。

次に、メソッドは静的メソッドから呼び出される静的(クラスPrintAccount()に属する)である必要があります。BankprogramMain()

class Bankprogram
{
    public static void Main()
    {   
        Account RobsAccount;

        RobsAccount.State = AccountState.Active;

        RobsAccount.Name = "Rob Miles";

        RobsAccount.AccountNumber = 1234;

        RobsAccount.Address = "his home";

        RobsAccount.Balance = 0;

        RobsAccount.Overdraft = -1;

        Console.WriteLine("name is " + RobsAccount.Name);

        Console.WriteLine("balance is : " + RobsAccount.Balance );

        PrintAccount(RobsAccount); // This line has been moved.
    }

    // This method has become STATIC!
    public static void PrintAccount(Account a)
    {
        Console.WriteLine ("Name" + a.Name);

        Console.WriteLine ("Address :" + a.Address);

        Console.WriteLine ("Balance:" + a.Balance);
    }
}
于 2012-08-16T19:18:38.270 に答える
0

ここには 2 つの問題があります。

  • メソッドからではなく、クラスから PrintAccount メソッドを呼び出そうとしています。それは明らかにうまくいきません。
  • PrintAccount メソッドは静的メソッドではないため、クラスがインスタンス化されたときにのみ到達できます。つまり、メイン関数から呼び出すことはできません。

次の 2 つの点を変更してみてください。

  • PrintAccount を静的メソッドにする
  • メイン メソッドから PrintAccount メソッドを呼び出します。

コードは次のようになります。

public static void Main()
{   
    Account RobsAccount;
    RobsAccount.State = AccountState.Active;
    RobsAccount.Name = "Rob Miles";
    RobsAccount.AccountNumber = 1234;
    RobsAccount.Address = "his home";
    RobsAccount.Balance = 0;
    RobsAccount.Overdraft = -1;
    Console.WriteLine("name is " + RobsAccount.Name);
    Console.WriteLine("balance is : " + RobsAccount.Balance );
    PrintAccount(RobsAccount);
}

public static void PrintAccount(Account a)
{
    Console.WriteLine ("Name" + a.Name);
    Console.WriteLine ("Address :" + a.Address);
    Console.WriteLine ("Balance:" + a.Balance);
}

幸運を!

于 2012-08-16T19:29:58.397 に答える
0

おそらくタイプミスです。あなたのものなのか、本にあるのかわかりません。

への呼び出しPrintAccountは、クラス BankProgram のメソッド内で行う必要があります。書かれているように、呼び出しはどのメ​​ソッドからも外れており、これはエラーです。
さらに、インスタンス メンバー メソッドを呼び出すには、BankProgram クラスのインスタンスを作成する必要があるため、PrintAccount メソッドを Main 内部から呼び出す場合も静的にする必要があります。

class Bankprogram 
{ 
    public static void Main() 
    {    
        Account RobsAccount; 
        RobsAccount.State = AccountState.Active; 
        RobsAccount.Name = "Rob Miles"; 
        RobsAccount.AccountNumber = 1234; 
        RobsAccount.Address = "his home"; 
        RobsAccount.Balance = 0; 
        RobsAccount.Overdraft = -1; 
        Console.WriteLine("name is " + RobsAccount.Name); 
        Console.WriteLine("balance is : " + RobsAccount.Balance ); 
        PrintAccount(RobsAccount);

        // OR - if you really want to keep NON STATIC the method PrintAccount
        // BankProgram bp = new BankProgram();
        // bp.PrintAccount(RobsAccount);
    } 

    public static void PrintAccount(Account a) 
    { 
        Console.WriteLine ("Name" + a.Name); 
        Console.WriteLine ("Address :" + a.Address); 
        Console.WriteLine ("Balance:" + a.Balance); 
    } 
} 
于 2012-08-16T19:20:07.363 に答える
0

問題は、メソッド内にないコードがクラスにあることです。

その行をMainメソッドに移動します。

using System; 


enum AccountState
{
  New,
  Active,
  UnderAudit,
  Frozen,
  Closed
};

struct Account
{
    public AccountState State;
    public string Name;
    public string Address;
    public int AccountNumber;
    public int Balance;
    public int Overdraft;
};

class Bankprogram
{

  public static void Main()
  {   
    Account RobsAccount;

    RobsAccount.State = AccountState.Active;

    RobsAccount.Name = "Rob Miles";

    RobsAccount.AccountNumber = 1234;

    RobsAccount.Address = "his home";

    RobsAccount.Balance = 0;

    RobsAccount.Overdraft = -1;

    Console.WriteLine("name is " + RobsAccount.Name);

    Console.WriteLine("balance is : " + RobsAccount.Balance );

    PrintAccount(RobsAccount);

  }

  public void PrintAccount(Account a)
  {
    Console.WriteLine ("Name" + a.Name);

    Console.WriteLine ("Address :" + a.Address);

    Console.WriteLine ("Balance:" + a.Balance);
  }

}

補足: コードはstructデータ オブジェクトに a を使用していますが、ここでは aclassが適切です。

于 2012-08-16T19:21:04.883 に答える