[英]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
是合適的。
這里有兩件事是錯的;
嘗試更改以下兩件事:
您的代碼將如下所示:
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.