Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1136to1140
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

verkette Liste als benutzerdefinierter Datentyp | Herbers Excel-Forum

verkette Liste als benutzerdefinierter Datentyp
06.02.2010 15:04:17
suchehilfe

Hallo zusammen,
ich möchte mir eine verkettete Liste als benuterdefinierten Typ erstellen.
Nutze dazu folgenden Code:

Type Element
Inhalt As Integer
nachfolger As Element
End Type
Type Liste
Start As Element
End Type
Public Sub test()
Dim A As Liste
Dim d,e As Element
A.Start = d
d.Inhalt = 1
d.nachfolger = Null
End Sub

Bekomme dann beim Test des Sub die Fehlermeldung: Fehler beim Kompilieren Wechselseitige Abhängigkeiten von Modulen.
Wie muss ich den Zeiger auf das nächste Element der Liste definieren?
Danke

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: verkette Liste als benutzerdefinierter Datentyp
06.02.2010 15:31:02
ransi
HAllo
Type Element
Inhalt As Integer
nachfolger As Element
End Type
Versuch mal so:
Option Explicit


Type Element
    Inhalt As Integer
    nachfolger As Variant
End Type

Type Liste
    Start As Element
End Type

Public Sub test()
Dim A As Liste
Dim d As Element
Dim e As Element
A.Start = d
d.Inhalt = 1
d.nachfolger = Null
End Sub


Hatte die Meldung noch nie, aber ich denke das ist sowas wie ein Zirkelbezug.
ransi
Anzeige
AW: verkette Liste als benutzerdefinierter Datentyp
06.02.2010 15:57:22
suchehilfe
Hallo,
wie immer, ein Problem gelöst, kommt schon das nächste.
Type Element
Inhalt As Integer
nachfolger As Variant
End Type

funktioniert.
Wenn ich mein Testbeispiel aber mit einem zweiten Element e erweitere, welche der Nachfolger von d sein soll,
Public Sub test()
Dim A As Liste
Dim d As Element
Dim e As Element
A.Start = d
d.Inhalt = 1
d.nachfolger = e
e.Inhalt = 2
e.nachfolger = Null

, bekomme ich folgende Meldung:
Fehler beim Kompilieren
Nur benutzerdefinierte Typen, die in öffentlichen Objektmodulen definiert sind,
können in den oder aus den Typ Variant umgewandelt oder an eine zur
Laufzeit auflösbare Funktion weitergeleitet werden.
Was muss ich jetzt machen. Eine Liste, die nur eine Startelement hat, ist ja nicht so der Bringer :-)
Danke
Anzeige
Das wird wohl an...
06.02.2010 16:28:35
Luc:-?
...d.nachfolger = e liegen,
denn e ist ja auch As Element deklariert und benutzerdefinierte Typen als Element von udTypen geht wahrscheinlich nicht...
Ich bekomme diese Meldung regelmäßig, wenn ich einen udTyp als Argument bzw Parameter übergeben will, und die vorherige, wenn ein udTyp in mehr als nur einem Modul eines Projektes definiert wird. Seitdem definiere ich alle udTypen stets im selben einen Modul eines vbProjektes.
Gruß+schöWE, Luc :-?
AW: Das wird wohl an...
06.02.2010 16:36:13
suchehilfe
Hi,
ich habe das so:
Type Element
Inhalt As Integer
nachfolger As Variant
End Type
Type Liste
Start As Element
End Type
Public Sub test()
Dim A As Liste
Dim d As Element
Dim e As Element
A.Start = d
d.Inhalt = 1
d.nachfolger = e
e.Inhalt = 2
e.nachfolger = Null
End Sub

in einem Modul zusammen stehen. Wenn ich dich richtig verstehe, war das doch ein Vorschlag, oder?
Was meinst du genau mit?
Seitdem definiere ich alle udTypen stets im selben einen Modul eines vbProjektes.

Was sind den öffentliche Objektmodule? Modul2 habe ich einfach durch 'Einfügen' erstellt.
Muss ich da noch was einstellen?
Anzeige
Das war nur ein Ordnungsvorschlag! Dein...
06.02.2010 16:45:34
Luc:-?
...neues Problem wird das nicht lösen. Die von mir monierte Zeile wird höchstwahrscheinlich gg die Type-Regeln verstoßen, ???*
* Hier würde normalerweise dein Name stehen, weil das zur Netiquette gehört. Da du selbst dich aber nicht daran hältst...
Luc :-?
noch nicht gelöst
06.02.2010 17:06:37
suchehilfe
Schade,
ich habe mal versucht die Type-Anweisung in ein eigenes Modul zu, sie jeweils public zu deklarieren und sie in ein Klassenmodul zu setzen. Leider alles ohne Erfolg.
Wegen der Netiquette: Fehlt nur mein Name bzw. Pseudonym unter dem Beitrag? Oder darf man kein Pseudonym verwenden?
Zurück zum Problem: Hat noch jemand eine Idee?
Danke
suchehilfe
Anzeige
noch nicht gelöst
06.02.2010 17:10:18
suchehilfe
Schade,
ich habe mal versucht die Type-Anweisung in ein eigenes Modul zu, sie jeweils public zu deklarieren und sie in ein Klassenmodul zu setzen. Leider alles ohne Erfolg.
Wegen der Netiquette: Fehlt nur mein Name bzw. Pseudonym unter dem Beitrag? Oder darf man kein Pseudonym verwenden?
Zurück zum Problem: Hat noch jemand eine Idee?
Danke
suchehilfe
AW: noch nicht gelöst
06.02.2010 17:19:03
Josef Ehrensberger
Hallo ???

suchst du etwas in dieser Art?

Type Liste
  Inhalt As Integer
  nachfolger As Variant
End Type


Public Sub test()
  Dim A(1) As Liste
  
  A(0).Inhalt = 1
  A(0).nachfolger = "e"
  A(1).Inhalt = 2
  A(1).nachfolger = "Hallo"
  
  MsgBox A(0).Inhalt
  MsgBox A(1).nachfolger
  
End Sub

Gruß Sepp
Anzeige
AW: noch nicht gelöst
06.02.2010 17:41:41
suchehilfe
Hi,
leider nicht. Bei deiner Lösung sind die Elemente ja wieder in einem recht unflexiblen Array gespeichert.
Ich möchte die Elemente verketten können. Zum Beispiel einfach ein Element mitten in die Liste einfügen, oder löschen etc. Deshalb brauche ich ja bei 'Nachfolger' ja auch einen Zeiger auf ein Objekt vom Typ Element.
Scheint ja ein Problem beim Casten von Variant auf ein benutzerdefinierten Typ zu sein. Habe aber keine Ahnung was öffentlichen Objektmodule sind.
Danke
suchehilfe
AW: noch nicht gelöst
06.02.2010 17:41:50
suchehilfe
Hi,
leider nicht. Bei deiner Lösung sind die Elemente ja wieder in einem recht unflexiblen Array gespeichert.
Ich möchte die Elemente verketten können. Zum Beispiel einfach ein Element mitten in die Liste einfügen, oder löschen etc. Deshalb brauche ich ja bei 'Nachfolger' ja auch einen Zeiger auf ein Objekt vom Typ Element.
Scheint ja ein Problem beim Casten von Variant auf ein benutzerdefinierten Typ zu sein. Habe aber keine Ahnung was öffentlichen Objektmodule sind.
Danke
suchehilfe
Anzeige
ArrayList ???
06.02.2010 18:54:51
ransi
HAllo
Ich möchte die Elemente verketten können. Zum Beispiel einfach ein Element mitten in die Liste einfügen, oder löschen
HAst du dich schonmal mit einer ArrayList beschäftigt ?
Die kann das ohne Probleme.
Option Explicit

Dim objAL As Object

Public Sub Aufruf()
Beispieldaten_rein
Löschen
einzelne_daten_ergänzen
End Sub


Public Sub Beispieldaten_rein()
Dim I As Integer
Set objAL = Nothing
Set objAL = CreateObject("System.Collections.ArrayList")
For I = 1 To 10
    objAL.Add I
Next
MsgBox Join(objAL.toArray, vbCrLf)
End Sub



Public Sub Löschen()
objAL.RemoveRange 2, 3 'Ab Index 2 werden die nächsten 3 Elemente gelöscht
MsgBox Join(objAL.toArray, vbCrLf)
End Sub


Public Sub einzelne_daten_ergänzen()
objAL.Insert 3, "ABC"
MsgBox Join(objAL.toArray, vbCrLf)
End Sub


Schau es dir mal in Ruhe an.
ransi
Anzeige
Wer weiß, ob er das will, Ransi?! Vielleicht...
07.02.2010 02:30:36
Luc:-?
...will er ja doch lieber weiter einen udType „vergewaltigen“... ;-)
Gruß+schöSo, Luc :-?
AW: Wer weiß, ob er das will, Ransi?! Vielleicht...
07.02.2010 10:04:17
ransi
HAllo
Wer weiß, ob er das will,...
Ich hab mich jetzt einfach mal hierdran orientiert:
"Ich möchte die Elemente verketten können. Zum Beispiel einfach ein Element mitten in die Liste einfügen, oder löschen..."
Dafür ist die ArrayList wie gemacht.
Wenn man sowas "nach alter Väter Sitte" machen will, bietet sich am besten eine eigene Array-Klasse an.
In der kann man dann die Elemente der Arrays hin und her schaufeln.
ransi
Anzeige
Sicher...! ;-) Gruß+schöSo -owT
07.02.2010 13:09:12
Luc:-?
:-?
AW: ArrayList ???
07.02.2010 22:21:08
suchehilfe
Hi,
der Tip hat mir geholfen. ArrayList kann so ziemlich genau das, was ich brauche.
Gestern war es etwas spät, deshalb kommt auch erst so spät ne Rückmeldung.
Danke
Jörg

145 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige