我对编程很新,并遇到了一个小问题,很抱歉,如果它是一个非常简单的解决方案,但我没有得到它。所以我正在编写一个非常简单的版本,用于练习。我创建了一个方法,将所有5张卡生成一个数组,我正在尝试使用该数组来创建一个列表,作为玩家套牌。但是,在我试图在Monsters数组中执行此操作的for循环中,它表示它在当前上下文中不存在?
//Generates monsters and magic cards
public static MonsterCard[] GenerateCards()
{
MonsterCard[] Monsters = new MonsterCard[5];
Monsters[0].Name = "Lizard King";
Monsters[0].Attack = 4;
Monsters[0].Health = 3;
Monsters[1].Name = "Piggy";
Monsters[1].Attack = 2;
Monsters[1].Health = 1;
Monsters[2].Name = "Great Drake";
Monsters[2].Attack = 7;
Monsters[2].Health = 5;
Monsters[3].Name = "Bear";
Monsters[3].Attack = 5;
Monsters[3].Health = 3;
Monsters[4].Name = "Lion";
Monsters[4].Attack = 6;
Monsters[4].Health = 4;
return Monsters;
}
main():
int main(){
int number;
GenerateCards();
Random rnd = new Random();
//Player 1 deck
for (int i = 0; i < 10; i++)
{
number = rnd.Next(0, 4);
Player1.Deck[i] = Monsters[number]; //<-- this Monsters is where the problem comes
}
}
答案 0 :(得分:1)
GenerateCard
会返回Monsters
,但您永远不会在main()
中在本地捕获它们。
Monster
是GenerateCards()
的本地,并在函数执行完毕后立即死亡。
int main(){
// ..
MonsterCard[] Monsters = GenerateCards();
// ..
}
上述问题将解决该问题,因为return Monsters
来自GenerateCards()
main()
,其中包含您在 <Property Id="CPP2015REDISTX64">
<RegistrySearch Id="CPP2015RedistX64_RegKey" Type="raw" Root="HKLM"
Key="SOFTWARE\Microsoft\VisualStudio\14.0\VC\VCRedist\x64"
Name="Installed"
Win64="yes"/>
</Property>
<Condition Message='[Error Message]'>
CPP2015REDISTX64
</Condition>
内查找的值。
答案 1 :(得分:0)
您必须将monsters
属性移动到全局上下文中。
那是因为它在另一个方法的范围中,所以它是一个局部变量,只能从这个方法访问(它只存在于这个方法中)。
一个例子:
void m1 ()
{
int a;
//a exists
{
int b;
//a and b exist
}
//only a exists
}
//nothing exists
void m2 ()
{
//still nothing exists
int c;
//Only c exists
}
变量仅存在于其封闭的范围中。这意味着,如果您在方法之外定义变量,则它适用于所有方法:
int a;
void m1 ()
{
//a exists
}
void m2 ()
{
//a still exists
}
要了解有关详情,请仔细阅读this。