2013-06-04 3 views
0

VB6의 일부 객체 지향 기능에 익숙해졌습니다. 나는 자바와 함께 많은 OOP를 해왔다. 그리고 이것을 작동 시키려고 노력하고있다 :비어있는 배열의 인덱스인지 확인 VB6

나는 Card 개의 배열을 가지고 있는데 배열의 인덱스에있는 객체가 만들어 졌는지 확인하고 싶다. 나는 아직 인덱스에 개체를 할당 한 경우 테스트하려면이 옵션을 사용하여 시도하는 경우

Set cardsPlayer1(index) = New Card 

:

Dim cardsPlayer1(1 To 10) As Card 

는이 같은 객체를 생성

For counter = 1 To 10 
    If (cardsPlayer1(counter) Is Nothing) Then 
     Set cardsPlayer1(counter) = New Card 
    End If 
Next counter 

그러나 그것은 나에게 진정한했다 값을 매번 사용하고 전체 배열에 새 객체를 만듭니다.

'Jordan Mathewson 
'May 31, 2013 
Dim cardsPlayer1(1 To 10) As Card 
Dim cardsPlayer2(1 To 10) As Card 

Private Sub cmdStartGame_Click() 
    Call addCard(1) 
End Sub 

'Called to add a card to one of the player's stacks 
Private Sub addCard(player As Integer) 
    Dim counter As Integer 

    'To add a card to player1.. 
    If (player = 1) Then 

     For counter = 1 To 10 
      If (cardsPlayer1(counter) Is Nothing) Then 
       Print "Object created." '<- Printed 10 times. 
       Set cardsPlayer1(counter) = New Card 
      End If 
     Next counter 

    'To add a card to player2.. 
    Else 
     For counter = 1 To 10 
      If (cardsPlayer2(counter) Is Nothing) Then 
       Set cardsPlayer2(counter) = New Card 
      End If 
     Next counter 

    End If 

    Call refreshForm 

End Sub 
+2

맞습니다. 그게 왜 효과가 없을지 모르겠다. 거기에 당신이 보여주는 다른 부분이 있습니까? 아니면 잘못하고 있다는 것을 어떻게 알 수 있습니까? – Boann

+1

다시 타이핑하지 않고 코드를 복사하여 붙여 넣을 수 있습니까? 특히 처음 두 샘플, 오타를 발견하는 데 도움이 될 수 있습니다. – Deanna

+0

* 요소 *가 될 수 있지만 * 색인 *은 비워 둘 수 없습니다. – Bob77

답변

1

정확하게 이해하면 addCard 서브 카드는 하나의 카드를 추가해야하지만 한 번만 호출하면 모든 카드를 추가해야합니다. 어떤 배열 요소가 비어 있는지 알 수 없기 때문이 아닙니다. 성공적으로 추가 한 후에 멈추지 않기 때문입니다.

For counter = 1 To 10 
    If (cardsPlayer1(counter) Is Nothing) Then 
     Set cardsPlayer1(counter) = New Card 
     Exit For ' <-- Add this 
    End If 
Next counter 

Exit For없이,이 배열을 통해 반복 유지하고 나머지를 초기화합니다.

+0

그게 전부입니다. 나는 내가 그것을 놓쳤다라고 생각한다. 감사! – Jordanss10

0

난 당신이 범위 지정 문제가있을 수 있습니다 의심 :

다음은 관련 코드입니다. 이것은 나에게 예상 결과를 제공합니다 :

Sub Test() 
    Dim objectsArray(1 To 5) As TestObject 

    If objectsArray(1) Is Nothing Then 
     MsgBox "objectsArray(1) Is Nothing" ' <----- displayed 
    End If 

    Set objectsArray(1) = New TestObject 

    If objectsArray(1) Is Nothing Then 
     MsgBox "objectsArray(1) Is Nothing" 
    Else 
     MsgBox "Not objectsArray(1) Is Nothing" ' <----- displayed 
    End If 
End Sub 

여기서 objectsArray; 당신은 어디서 객체를 생성합니까? 루프는 어디에 있습니까? (이 코드는 다른 모듈/클래스 모듈/함수에 포함되어 있습니까?)