2016-06-02 3 views
1

내가 오류 메시지가 계속 사용자 정의 클래스의 배열에 액세스 할 수 없습니다는 연합

listOfBanks [0] .Deposit (50);

accntBlnce.text = "계좌 잔고 : \ n"+ listOfBanks [curBank] .GetBalance의 toString() ("C").

나는 3 개의 옵션을 드롭 다운 메뉴에 나열하고 Debug.Log 배열의 항목 수를 3로 계산합니다. 그러나 나는 그들과 아무 것도 할 수 없다. 은행 변수는 inspector의 Dropdown 객체와 AccntBlnce를 내 패널의 텍스트 객체로 설정합니다.

코드는 다음과 같습니다.

Banks.cs

public class Banks : MonoBehaviour { 

    public Dropdown banks; 
    public Text accntBlnce; 
    public Bank[] listOfBanks; 
    public int curBank = 0; 

    void Start() { 
     listOfBanks = new Bank[banks.options.Count]; 
     listOfBanks[0].Deposit(50); 
    } 

    void Update() { 
     curBank = banks.value; 
     accntBlnce.text = "Account Balance:\n" + listOfBanks[curBank].GetBalance().ToString("c"); 
    } 
} 

Bank.cs는

public class Bank{ 

    public Bank() { } 

    public Bank(string orgn, float amntToRprt, float blnce) { 
     origin = orgn; 
     amountToReport = amntToRprt; 
     balance = blnce; 
    } 

    public string origin { get; set; } 
    public float amountToReport { get; set; } 
    public float balance { get; set; } 

    public bool Deposit(float amnt) { 
     if (amnt > 0) { 
      balance += amnt; 
      if(amnt > amountToReport) { 
       FlagForReport(); 
      } 
      return true; 
     } 
     else 
      return false; 
    } 

    private void FlagForReport() { 
     throw new NotImplementedException(); 
    } 

    public float GetBalance() { 
     return balance; 
    } 

    public bool Withdraw(float amnt) { 
     if (amnt > 0) { 
      if (balance >= amnt) { 
       balance -= amnt; 
       return true; 
      } 
      else 
       return false; 
     } 
     else 
      return false; 
    } 

    public bool Transfer(float amnt, Bank bank) { 
     if (amnt > 0) { 
      if (balance >= amnt) { 
       if(bank.Deposit(amnt)) 
        balance -= amnt; 
       return true; 
      } 
      else 
       return false; 
     } 
     else 
      return false; 
    } 
} 

답변

2

이 네 번째 배열 문제는-같은 문제와-같은 솔루션을 이번 주에 질문입니다.

현재 배열을 선언

listOfBanks = new Bank[banks.options.Count]; 

하지만 당신은

listOfBanks[0].Deposit(50);listOfBanks[curBank].GetBalance().ToString("c").

를 호출 배열을 선언하고 크기를 설정하면 하지 전에 각 은행 스크립트의 새 인스턴스를 작성하지 않은 - 스크립트의 새 인스턴스를 만드는 것과 동일합니다.

해결 방법은 배열을 순환하여 각 인스턴스의 새 인스턴스를 만드는 것입니다. 당신의 Banks.cs에서

, 아래와으로 Start() 함수에서 코드를 대체 : 나는 당신의 응답을 수신 한

void Start() 
{ 
    //Declare how much Bank array should be created 
    listOfBanks = new Bank[banks.options.Count]; 

    //Now Create instance of each bank 
    for (int i = 0; i < listOfBanks.Length; i++) 
    { 
     //Create new instance of each Bank class 
     //listOfBanks[i] = new Bank(); 
     listOfBanks[i] = new Bank("", 50, 50); 
    } 

    listOfBanks[0].Deposit(50); 
} 
+0

그래, 나는이를 입력하고, 내가 바보 생각합니다. 오래도록 프로그래밍되었으므로 오래되었습니다. 질문을 삭제해야합니까? –

+0

@The_Guy 아니요. 사람들은 그것으로부터 배울 것입니다. 유니티 배열 null 물건을 googles 사람이 가능성이 이들을 가로 질러 올 것이다. 더 많은 사람들이 같은 질문을 다시하지 못하게합니다. – Programmer