2017-05-23 13 views
-6

に存在しません:それはPlayerクラスでAttack()内のコードの行を参照することだ変数は、現在のコンテキストだから、私はこれをエラーとして取得してい

The name p1 does not exist in the current context.

namespace GameOne 
{ 
    public class Program 
    { 
     public static void Main() 
     { 
      Ai [] badguys = new Ai [5]; 
      Player p1 = new Player(); 
     } 
    } 

    public class Ai 
    { 
     public Ai() 
     { 
      int Health = 10; 
      int Damage = 1; 
     } 

     public static int Attack() 
     { 
      p1.Health--; 
      return p1.Health; 
     } 
    } 

    public class Player 
    { 
     public Player() 
     { 
      int Health = 50; 
     } 
    } 
} 
+0

'p1'は' Main() 'のローカル変数です。 'Attack()'には 'p1'というシンボルが定義されていません。 – xxbbcc

+1

コードを投稿するときは、コードを正しく確認して、インデントが一貫していることを確認し、読みやすくするために余分な空白行を削除してください。 – crashmstr

+0

質問する前に、常にエラーをオンラインで検索してください。次の投稿が役立ちます。 https://stackoverflow.com/questions/41974155/the-name-does-not-exist-in-the-current-context –

答えて

0

p1が攻撃方法の範囲外です。あなたはmainの内部に(暗黙的にプライベートな)オブジェクトを宣言していますので、Attackメソッドには見えません。 Attack()は単にp1が何であるか全く分かりません。

1

@xxbbccは、p1がMain()のローカル変数であるため、攻撃はp1について何も知らないためです。あなたはその後、AIの外にそれらを使用するので、もし

int Health = 10; 
    int Damage = 1; 

がAIにローカルです:

public static int Attack(int health) 
{ 
    health--; 
    return health; 
} 

さらに:

あなたがアタックにp1.Healthに渡すことができますあなたのコードを動作させるために、あなたはそこで同じ問題を抱えています。

関連する問題