簡體   English   中英

方法必須有返回類型(C#)

[英]Method must have return type (C#)

所以我一直在用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);”

我知道之前已經問過這個問題,但沒有一個問題與我的問題類似。

問題是編譯器認為是PrintAccount(RobsAccount); 是一個方法定義,這就是為什么需要返回類型。

你必須在另一個方法中調用該方法,你不能在void上調用它。

有兩個問題

問題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
    }  
}
PrintAccount(RobsAccount);

你什么時候期望完全調用這個函數? 你已經把它放在了類定義的中間(這就是你得到錯誤的原因)。 你期望在程序啟動時調用它嗎? 創建類的第一個實例時? 它沒有意義; 類是對象的模板。

如果要調用方法,則必須使用其他方法(暫時不進行靜態初始化)。 所以,刪除該行,然后在主...

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

另請注意,您的設計非常奇怪。 你已經定義了Bankprogram類的主要內部(為什么?), 一切都是靜態的。 您是否只打算允許一個帳戶,其中所述帳戶的每個屬性都是硬編碼的? 似乎沒有用。

首先,您嘗試在任何其他方法之外調用PrintAccount()方法! 這似乎是一個錯字。

其次, PrintAccount()方法必須是靜態的(它屬於Bankprogram類),它是從靜態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); // 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);
    }
}

可能是拼寫錯誤。 不知道你的書還是書。

PrintAccount的調用應該在PrintAccount類的方法中進行。 如上所述,調用在任何方法之外,這是一個錯誤。
更多,PrintAccount方法,如果從Main內部調用,也應該是靜態的,因為要調用實例成員方法,您需要創建BankProgram類的實例

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

問題是你在類中有代碼,不在方法中。

將該行移動到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作為數據對象,其中一個class是合適的。

這里有兩件事是錯的;

  • 您試圖從類中調用PrintAccount方法,而不是從任何方法調用。 那顯然不會奏效。
  • 您的PrintAccount方法不是靜態方法,因此只能在實例化類時才能到達。 這意味着您將無法從主函數中調用它。

嘗試更改以下兩件事:

  • 使您的PrintAccount成為靜態方法
  • 從main方法調用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);
}

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM