Косяк с классами.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Косяк с классами.

Сообщение netdemon » 29.09.2007 (Сб) 21:24

Вот код функции.
Код: Выделить всё

Private Function GetCard(Line As Integer, Pos As Integer, view As Boolean) As TCard

Dim i As Integer

For i = PACK_TOTAL - 1 To 0 Step -1
If Well(Line, Pos, i).b_Is Then
   If Not view Then
     Well(Line, Pos, i).b_Is = False
     GetCard = Well(Line, Pos, i)
   End If
End If

MsgBox "Неверная попытка взять карту!"
GetCard = Well(0, 0, 0) ' !!!!Вот эту строку подсвечивает.!!!!
Next i
End Function



Вот класс:


Код: Выделить всё


'local variable(s) to hold property value(s)
Private mvarSuit As Integer 'local copy
Private mvarValue As Integer 'local copy
Private mvarb_Is As Boolean 'local copy

Public Property Let b_Is(ByVal vData As Boolean)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.b_Is = 5
    mvarb_Is = vData
End Property


Public Property Get b_Is() As Boolean
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.b_Is
    b_Is = mvarb_Is
End Property



Public Function GetValue() As Integer
GetValue = Value
End Function

Public Function GetSuit() As Integer
GetSuit = Suit
End Function

Public Sub Init(i_value As Integer, i_suit As Integer)
Suit = i_suit
Value = i_value
b_Is = True
End Sub

Public Property Let Value(ByVal vData As Integer)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.Value = 5
    mvarValue = vData
End Property


Public Property Get Value() As Integer
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.Value
    Value = mvarValue
End Property



Public Property Let Suit(ByVal vData As Integer)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.Suit = 5
    mvarSuit = vData
End Property


Public Property Get Suit() As Integer
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.Suit
    Suit = mvarSuit
End Property



Ошибка! Object Variable or With block not set!

Инициализирую переменную класса так


Код: Выделить всё


Private Sub MDIForm_Load()

Set Pack = New TPack

Dim i, j, k As Integer
For i = 0 To 4
For j = 0 To 4
  For k = 0 To PACK_TOTAL - 1
Set Well(i, j, k) = New TCard
  Next k
Next j
Next i

End Sub



Вот сам проект без отрисовки.
Вложения
Well.zip
(36.98 Кб) Скачиваний: 33

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.09.2007 (Сб) 23:29

netdemon
Напиши Set GetCard = Well(0, 0, 0) вместо GetCard = Well(0, 0, 0) и возрадуйся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 30.09.2007 (Вс) 0:00

вылезает ERROR "Type mistmach!"

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.09.2007 (Вс) 18:02

Всюду, где ты присваиваешь ссылки на объекты TCard, допиши Set.
У тебя таких мест много.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.09.2007 (Вс) 18:38

tyomitch
Поздно. Потому что он меня мучил вчера вечером (и ночью) несколько часов, доказывая мне, что C++ на порядок проще VB, и что там цикл вида

Код: Выделить всё
For i = A to B
     Set SomeArray(i) = Wall(x,y,z)
Next i

Function Wall(a,b,c) As TCard
       ...
       Set Wall = New TCard
       ...
End Function


в С++ будет выглядеть так:

Код: Выделить всё
TCard Wall(x,y,z)


(Гы-гы :) )

Но тем не менее - с Set-ами разобрались.+
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot] и гости: 58

    TopList  
cron