2016-11-25 21 views
-1

私はこれが簡単だと思いますが、私はオブジェクトの初期化に問題があります。コードを実行するたびに。私は間違いを続けた。私は「「System.NullReferenceException」種類の未処理の例外がWPFBattle.exeで発生しました」」行に27C#初期化オブジェクト

を出会いを初期化する必要があります。 『

だから私は誰かを尋ね、彼らは

教えてくれました』あなたはMainWindowのコンストラクタで遭遇を初期化するのを忘れていましたが、まだ初期化していないのにそれを渡してしまったので、遭遇はnullとして渡され、autobattleを呼び出すことはできません。それはあなたが戦闘のコンストラクタと一緒に新しいキーワードを使用することによって任意のユーザ定義オブジェクトを行うようにそれを初期化します。

私はそれをやってみましたが、エラーが続いています。私はなぜそれが動作しているのか分からない。 「私は私のコードの写真を添付し​​ており、任意の助けを大幅にあなたがいるので

public class Combat : ICombat 
{ 
    //Combat class 
} 

encounter = new Combat()//and of course provide necessary parameters if needed 

もののを呼び出す必要が出会いを初期化するには

PICTURE OF MY CODE 2

1 namespace WPFBattle 
2 { 
3  
4  
5  public partial class MainWindow : Window 
6  { 
7   private TextBoxStreamWriter consoleWriter; 
8   private TextBox outputField; 
9   private IList<ICharacter> playerParty = new List<ICharacter>(); 
10   public ICombat encounter; 
11   private CombatThread combatThread; 
12  
13   public MainWindow() 
14   { 
15    InitializeComponent(); 
16  
17    // Redirect console 
18    consoleWriter = new TextBoxStreamWriter(outputField); 
19    Console.SetOut(consoleWriter); 
20  
21    //creates the two parties 
22    List<ICharacter> party = new List<ICharacter>(); 
23    List<ICharacter> enemy = new List<ICharacter>(); 
24  
25  
26  
27    //PLACE I NEED TO INITIALIZE MY OBJECT AT 
28  
29  
30    combatThread = new CombatThread(encounter); 
31    combatThread.Start(); 
32   } 
33  
34   private void textBox_TextChanged(object sender, TextChangedEventArgs e) 
35   {  
36  
37   } 
38  
39  
40  } 
41 } 
+0

ICombatを継承するクラスはありますか?遭遇=新しいCombat(); – Davatar

+0

@Davatarご回答いただきありがとうございます。最初の写真の添付ファイルには私のCombatThreadコードが含まれていました。 – firmfiasco

+0

@MohitShrivastava私はその質問を以前に見て答えを読んだが、私は自分のコードでそれを実装する方法を見つけることができなかった – firmfiasco

答えて

1

:あなたは次のコードを持っている:

public ICombat encounter; 

をしかし、この変数の出会いが値になることはありません。だから、それはnullです。 30行目:このnull値をあなたのcombatThreadに渡します。

combatThread = new CombatThread(encounter); 

combatThreadアクセスが発生した場合は、どこかのように:出会いはタイプICombatであり、これはインターフェースなので

encounter.DoSth(); 

それは、

とNullReferenceException

がスローされます新しい演算子を使用することはできません。このインタフェースを実装するクラスが必要です。

public class Combat : ICombat 
{ 
    //Implement what the Interface need 
} 

そして、あなたの遭遇参照のための新しいオブジェクトを作成してください。

encounter = new Combat(); //IMPORTANT 
combatThread = new CombatThread(encounter); 
combatThread.Start(); 
+0

ありがとうございます! – firmfiasco

+0

@firmfiascoどのようにTextBoxStreamWriterクラスをやったのですか? – wolfclique

0

PICTURE OF MY CODE

をいただければ幸いです私はすでに問題が他のどこかに存在していると推測しています。 CombatThreadでのエンカウンターはどのように使用しますか?私はあなたがCombatThreadでそれを参照しているのを忘れてしまったが、CombatThread.mEncounterの割り当てが忘れられているか間違っていると思う。

CombatThreadでは、出会いのリファレンスをどのように初期化しますか? 10行目で

+0

ありがとうございます。最初の写真の添付ファイルには私のCombatThreadコードが含まれていました。 – firmfiasco

+0

CombatThread.Thread.Start()にブレークポイントを設定すると、実際にはnullになりますか?オートバトル()で何が起こるのですか?おそらくnull参照がそこからスローされますか? – user3532232

+0

私は30行目にブレークポイントを追加しましたが、うまくいきますが、31行目まで続けるとnullの参照がスローされます。 – firmfiasco

関連する問題