Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kleine OOP-Liste

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolfi30



Anmeldungsdatum: 17.08.2007
Beiträge: 38

BeitragVerfasst am: 25.11.2007, 15:19    Titel: Kleine OOP-Liste Antworten mit Zitat

Hallo,

hab hier mal der Übung wegen eine kleine Liste in Freebasic-OOP aufgebaut!
Mir ist dabei aufgefallen, das eine deklarierte Variable in einer FOR-Schleife in einer property-Anweisung nicht erkannt wird! Compiler zeigt mir "Variable not declared" an. Hab dann mit der while-wend variante gearbeitet und es ging dann!
Deklariere ich die Variable direkt in der property-Anweisung erkennt die For-Schleife die Variable an!

Hier mal der Code mit einem Beispiel


Code:
Type TListValue
   pValue As UByte
   pRev As TListValue Ptr
   pNext As TListValue Ptr
End Type

Type TList
   
   Declare Constructor()
   Declare Destructor()
   
   Declare Property GetStartAdr() As TListValue Ptr
   Declare Property Value() As UByte
   Declare Property Value(ByVal wert As UByte)
   Declare Property ListCount() As UInteger
   Declare Property DelListPos(ByVal position As UInteger)
   Declare Property InsertPos(ByVal position As UInteger)
   Declare Property GotoListPos(ByVal position As UInteger)
   Declare Sub Start()
   Declare Sub NewList()
   Declare Sub NextValue()
   Declare Sub PrevValue()
   
   
   Private:
      
      i As UInteger
      count As uInteger   
      pStart As TListValue Ptr
      pIst As TListValue ptr   
      pMerke As TListValue Ptr
      pMerkeNext As TListValue Ptr
      pDel As TListValue Ptr
      
End Type

Constructor TList()

   pStart=allocate(SizeOf(TListValue))
   pStart->pRev=0
   pIst=pStart
   count+=1
   
End Constructor   

Destructor TList()

   pMerke=pStart
   While pMerke->pNext <> 0
      pMerkeNext=pMerke->pNext
      deallocate(pMerke)
      pMerke=pMerkeNext
   Wend
   DeAllocate(pMerke)
   count=0
End Destructor

Property TList.GetStartAdr() As TListValue Ptr

   Property=pStart
   
End Property

Property TList.Value() As UByte

   Property=pIst->pValue
   
End Property

Property TList.Value(ByVal wert As UByte)

   pIst->pValue=wert
   
End Property

Property TList.ListCount() As UInteger

   Property=count
   
End Property

Property TList.DelListPos(ByVal position As UInteger)
   
   pMerke=pStart
   
   If position = 1 Then
      
      pDel=pMerke
      pMerke=pMerke->pNext
      pMerke->pRev=0
      pStart=pMerke   
      DeAllocate(pDel)
      count-=1
   
   ElseIf position = count Then
   
      While pMerke->pNext <> 0
         pMerke=pMerke->pNext
      Wend
      
      pDel=pMerke
      pMerke=pMerke->pRev
      pMerke->pNext=0
      DeAllocate(pDel)   
      count-=1
      
   ElseIf position > count Then
      
      Print "Error position > ListCount"
      
   Else

      i=1
      While i <= position-1
         pMerke=pMerke->pNext
         i+=1
      Wend
      
      pDel=pMerke
      pMerke=pDel->pRev
      pMerkeNext=pDel->pNext
      pMerke->pNext=pMerkeNext
      pMerkeNext->pRev=pMerke      
      DeAllocate(pDel)
      count-=1
      
   EndIf
   
End Property

Property TList.InsertPos(ByVal position As UInteger)

   pMerke=Allocate(SizeOf(TListValue))
   
   If position=1 Then
      
      pMerke->pRev=0
      pMerke->pNext=pStart
      pStart->pRev=pMerke
      pStart=pMerke
      Start()
      count+=1
   
   Else
      
      pIst=pMerke
      
      pMerke=pStart
      
      i=1
      While i <= position-2
         pMerke=pMerke->pNext
         i+=1
      Wend
      
      pMerkeNext=pMerke->pNext
      
      pMerke->pNext=pIst
      pMerkeNext->pRev=pIst
      
      pIst->pRev=pMerke
      pIst->pNext=pMerkeNext
      
      count+=1
      
   EndIf
   
   
   
End Property

Property TList.GotoListPos(ByVal position As UInteger)

   Start()
   i=1
   While i <= position-1
      pIst=pIst->pNext
      i+=1
   Wend
   
End Property

Sub TList.Start()
   
   pIst=pStart
   
End Sub

Sub TList.NewList()
   
   pIst->pNext=Allocate(SizeOf(TListValue))
   pMerke=pIst
   pIst=pIst->pNext
   pIst->pRev=pMerke
   pIst->pNext=0
   count+=1
   
End Sub

Sub TList.NextValue()
   
   If pIst->pNext <> 0 Then
      pIst=pIst->pNext
   EndIf
   
End Sub

Sub TList.PrevValue()
   
   If pIst->pRev <> 0 Then
      pIst=pIst->pRev
   EndIf
   
End Sub


Dim Liste As TList
Dim i As UInteger

Liste.Value=10

For i=2 To 10
   Liste.NewList
   Liste.Value=i*10
Next

Liste.Start

For i=1 To Liste.ListCount
   ? Liste.Value
   Liste.NextValue
Next

Sleep
?

Liste.InsertPos=3
Liste.Value=25
Liste.Start

For i=1 To Liste.ListCount
   ? Liste.Value
   Liste.NextValue
Next

Sleep
?

Liste.DelListPos=3
Liste.Start

For i=1 To Liste.ListCount
   ? Liste.Value
   Liste.NextValue
Next

Sleep


Gruß Wolfi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz