VB.Net 'Sub Main' 未找到
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23931908/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
VB.Net 'Sub Main' was not found
提问by Ed Prince
ok, I have an A level computing exam on Monday, and I have been working on the pre-release skeleton code.
好的,我周一有一个 A 级计算考试,我一直在研究预发布的骨架代码。
This morning when I tried I got an error saying 'Sub Main' was not found. There clearly is a Sub Main()in the code which I will paste in below.
今天早上当我尝试时,我收到一条错误消息'Sub Main' was not found。Sub Main()代码中显然有一个我将粘贴在下面。
I tried adding another sub main()before getting a second error saying Sub Main() has multiple definitions.
sub main()在收到第二个错误之前,我尝试添加另一个Sub Main() has multiple definitions。
I really need to get this sorted, so any help would be greatly appreciated.
我真的需要对此进行排序,因此将不胜感激任何帮助。
Here is the code for the Sub Main() by itself:
这是 Sub Main() 本身的代码:
Sub Main()
Dim Choice As Char
Dim Deck(52) As TCard
Dim RecentScores(NoOfRecentScores) As TRecentScore
Randomize()
Do
DisplayMenu()
Choice = GetMenuChoice()
Select Case Choice
Case "1"
LoadDeck(Deck)
ShuffleDeck(Deck)
PlayGame(Deck, RecentScores)
Case "2"
LoadDeck(Deck)
PlayGame(Deck, RecentScores)
Case "3"
DisplayRecentScores(RecentScores)
Case "4"
ResetRecentScores(RecentScores)
End Select
Loop Until Choice = "q"
End Sub
And here is the full code if that helps:
如果有帮助,这里是完整的代码:
'Skeleton Program code for the AQA COMP1 Summer 2014 examination
'this code should be used in conjunction with the Preliminary Material
'written by the AQA COMP1 Programmer Team
'developed in the Visual Studio 2008 (Console Mode) programming environment (VB.NET)
Module CardPredict
Const NoOfRecentScores As Integer = 3
Structure TCard
Dim Suit As Integer
Dim Rank As Integer
End Structure
Structure TRecentScore
Dim Name As String
Dim Score As Integer
End Structure
Sub Main()
Dim Choice As Char
Dim Deck(52) As TCard
Dim RecentScores(NoOfRecentScores) As TRecentScore
Randomize()
Do
DisplayMenu()
Choice = GetMenuChoice()
Select Case Choice
Case "1"
LoadDeck(Deck)
ShuffleDeck(Deck)
PlayGame(Deck, RecentScores)
Case "2"
LoadDeck(Deck)
PlayGame(Deck, RecentScores)
Case "3"
DisplayRecentScores(RecentScores)
Case "4"
ResetRecentScores(RecentScores)
End Select
Loop Until Choice = "q"
End Sub
Sub Main()
Console.Write("Boo")
End Sub
Function GetRank(ByVal RankNo As Integer) As String
Dim Rank As String = ""
Select Case RankNo
Case 1 : Rank = "Ace"
Case 2 : Rank = "Two"
Case 3 : Rank = "Three"
Case 4 : Rank = "Four"
Case 5 : Rank = "Five"
Case 6 : Rank = "Six"
Case 7 : Rank = "Seven"
Case 8 : Rank = "Eight"
Case 9 : Rank = "Nine"
Case 10 : Rank = "Ten"
Case 11 : Rank = "Hyman"
Case 12 : Rank = "Queen"
Case 13 : Rank = "King"
End Select
Return Rank
End Function
Function GetSuit(ByVal SuitNo As Integer) As String
Dim Suit As String = ""
Select Case SuitNo
Case 1 : Suit = "Clubs"
Case 2 : Suit = "Diamonds"
Case 3 : Suit = "Hearts"
Case 4 : Suit = "Spades"
End Select
Return Suit
End Function
Sub DisplayMenu()
Console.WriteLine()
Console.WriteLine("MAIN MENU")
Console.WriteLine()
Console.WriteLine("1. Play game (with shuffle)")
Console.WriteLine("2. Play game (without shuffle)")
Console.WriteLine("3. Display recent scores")
Console.WriteLine("4. Reset recent scores")
Console.WriteLine()
Console.Write("Select an option from the menu (or enter q to quit): ")
End Sub
Function GetMenuChoice() As Char
Dim Choice As Char
Choice = Console.ReadLine
Console.WriteLine()
Return Choice
End Function
Sub LoadDeck(ByRef Deck() As TCard)
Dim Count As Integer
FileOpen(1, "deck.txt", OpenMode.Input)
Count = 1
While Not EOF(1)
Deck(Count).Suit = CInt(LineInput(1))
Deck(Count).Rank = CInt(LineInput(1))
Count = Count + 1
End While
FileClose(1)
End Sub
Sub ShuffleDeck(ByRef Deck() As TCard)
Dim NoOfSwaps As Integer
Dim Position1 As Integer
Dim Position2 As Integer
Dim SwapSpace As TCard
Dim NoOfSwapsMadeSoFar As Integer
NoOfSwaps = 1000
For NoOfSwapsMadeSoFar = 1 To NoOfSwaps
Position1 = Int(Rnd() * 52) + 1
Position2 = Int(Rnd() * 52) + 1
SwapSpace = Deck(Position1)
Deck(Position1) = Deck(Position2)
Deck(Position2) = SwapSpace
Next
End Sub
Sub DisplayCard(ByVal ThisCard As TCard)
Console.WriteLine()
Console.WriteLine("Card is the " & GetRank(ThisCard.Rank) & " of " & GetSuit(ThisCard.Suit))
Console.WriteLine()
End Sub
Sub GetCard(ByRef ThisCard As TCard, ByRef Deck() As TCard, ByVal NoOfCardsTurnedOver As Integer)
Dim Count As Integer
ThisCard = Deck(1)
For Count = 1 To (51 - NoOfCardsTurnedOver)
Deck(Count) = Deck(Count + 1)
Next
Deck(52 - NoOfCardsTurnedOver).Suit = 0
Deck(52 - NoOfCardsTurnedOver).Rank = 0
End Sub
Function IsNextCardHigher(ByVal LastCard As TCard, ByVal NextCard As TCard) As Boolean
Dim Higher As Boolean
Higher = False
If NextCard.Rank > LastCard.Rank Then
Higher = True
End If
Return Higher
End Function
Function GetPlayerName() As String
Dim PlayerName As String
Console.WriteLine()
Console.Write("Please enter your name: ")
PlayerName = Console.ReadLine
Console.WriteLine()
Return PlayerName
End Function
Function GetChoiceFromUser() As Char
Dim Choice As Char
Console.Write("Do you think the next card will be higher than the last card (enter y or n)? ")
Choice = Console.ReadLine
Return Choice
End Function
Sub DisplayEndOfGameMessage(ByVal Score As Integer)
Console.WriteLine()
Console.WriteLine("GAME OVER!")
Console.WriteLine("Your score was " & Score)
If Score = 51 Then
Console.WriteLine("WOW! You completed a perfect game.")
End If
Console.WriteLine()
End Sub
Sub DisplayCorrectGuessMessage(ByVal Score As Integer)
Console.WriteLine()
Console.WriteLine("Well done! You guessed correctly.")
Console.WriteLine("Your score is now " & Score & ".")
Console.WriteLine()
End Sub
Sub ResetRecentScores(ByRef RecentScores() As TRecentScore)
Dim Count As Integer
For Count = 1 To NoOfRecentScores
RecentScores(Count).Name = ""
RecentScores(Count).Score = 0
Next
End Sub
Sub DisplayRecentScores(ByVal RecentScores() As TRecentScore)
Dim Count As Integer
Console.WriteLine()
Console.WriteLine("Recent scores:")
Console.WriteLine()
For Count = 1 To NoOfRecentScores
Console.WriteLine(RecentScores(Count).Name & " got a score of " & RecentScores(Count).Score)
Next
Console.WriteLine()
Console.WriteLine("Press the Enter key to return to the main menu")
Console.WriteLine()
Console.ReadLine()
End Sub
Sub UpdateRecentScores(ByRef RecentScores() As TRecentScore, ByVal Score As Integer)
Dim PlayerName As String
Dim Count As Integer
Dim FoundSpace As Boolean
PlayerName = GetPlayerName()
FoundSpace = False
Count = 1
While Not FoundSpace And Count <= NoOfRecentScores
If RecentScores(Count).Name = "" Then
FoundSpace = True
Else
Count = Count + 1
End If
End While
If Not FoundSpace Then
For Count = 1 To NoOfRecentScores - 1
RecentScores(Count) = RecentScores(Count + 1)
Next
Count = NoOfRecentScores
End If
RecentScores(Count).Name = PlayerName
RecentScores(Count).Score = Score
End Sub
Sub PlayGame(ByVal Deck() As TCard, ByRef RecentScores() As TRecentScore)
Dim NoOfCardsTurnedOver As Integer
Dim GameOver As Boolean
Dim NextCard As TCard
Dim LastCard As TCard
Dim Higher As Boolean
Dim Choice As Char
GameOver = False
GetCard(LastCard, Deck, 0)
DisplayCard(LastCard)
NoOfCardsTurnedOver = 1
While NoOfCardsTurnedOver < 52 And Not GameOver
GetCard(NextCard, Deck, NoOfCardsTurnedOver)
Do
Choice = GetChoiceFromUser()
Loop Until Choice = "y" Or Choice = "n"
DisplayCard(NextCard)
NoOfCardsTurnedOver = NoOfCardsTurnedOver + 1
Higher = IsNextCardHigher(LastCard, NextCard)
If Higher And Choice = "y" Or Not Higher And Choice = "n" Then
DisplayCorrectGuessMessage(NoOfCardsTurnedOver - 1)
LastCard = NextCard
Else
GameOver = True
End If
End While
If GameOver Then
DisplayEndOfGameMessage(NoOfCardsTurnedOver - 2)
UpdateRecentScores(RecentScores, NoOfCardsTurnedOver - 2)
Else
DisplayEndOfGameMessage(51)
UpdateRecentScores(RecentScores, 51)
End If
End Sub
End Module
Thanks in advance, Ed
提前致谢,埃德
回答by Matt Wilko
You have to specify the startup object in order for Sub Mainto be found. In your case this is the module CardPredict
您必须指定启动对象才能Sub Main找到。在你的情况下,这是模块CardPredict
Go to
去
Project>[Your project] Properties>Application Tab
Project> [Your project] Properties>Application Tab
Then set the Startup Objectthere.
然后在Startup Object那里设置。
I'm guessing that you renamed your Module1(the default) to CardPredictjust before this error occurred?
我猜您是在发生此错误之前将您的Module1(默认值)重命名为CardPredict?
in the future if you want to rename a class/module/method name, just right click on it and select rename. This will then rename all instances of this in your project to the new name.
以后如果要重命名类/模块/方法名称,只需右键单击它并选择重命名。然后,这会将您项目中的所有实例重命名为新名称。
回答by Philip Rego
If you don't have a main in your solution. Right click your project | Properties | Application tab | Application Type: should be Class Library (maybe other). Startup object should be (None).
如果您的解决方案中没有主要内容。右键单击您的项目 | 属性 | 应用程序选项卡 | 应用程序类型:应该是类库(可能是其他的)。启动对象应该是(无)。
回答by Borislav Ivanov
In my case Application.xaml and Application.xaml.vb were missing from the project. As they were not included, the build tooling doesn't generate the Sub Main method, which was set in the project Properties tab.
就我而言,项目中缺少 Application.xaml 和 Application.xaml.vb。由于未包含它们,因此构建工具不会生成在项目属性选项卡中设置的 Sub Main 方法。

