Variable type mismatch

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Toasty

Betreff: Variable type mismatch

BeitragSo, Apr 04, 2010 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
was ist mir dem Fehler "Variable type mismatch" gemeint?

Brauche schnelle Antwort!

Gruß Toasty

Thunder

BeitragSo, Apr 04, 2010 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das heißt du verwendest dieselbe Variable (explizit!) einmal zB als Integer und einmal als String (oder Float):

Beispiel:
BlitzBasic: [AUSKLAPPEN]
Local s$
s%=5



mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

Toasty

BeitragSo, Apr 04, 2010 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, aber wie änder ich das?

BlitzBasic: [AUSKLAPPEN]
;(...)
Server2=OpenTCPStream("127.0.0.1",8060)
If Not Server2 Then RuntimeError"Creating listenstream failed!"

Print"Opening Sokets... (30x)"
Type connections
Field soket1
Field soket2
Field soket3
Field soket4
Field soket5
Field soket6
Field soket7
Field soket8
Field soket9
Field soket10
Field soket11
Field soket12
Field soket13
Field soket14
Field soket15
Field soket16
Field soket17
Field soket18
Field soket19
Field soket20
Field soket21
Field soket22
Field soket23
Field soket24
Field soket25
Field soket26
Field soket27
Field soket28
Field soket29
Field soket30
End Type
Print"30 Sokets are Open."
Delay 300
Print"Clear Sokets..."
For t = 1 To 100
ip.connections=New connections
ip\soket1=""
ip\soket2=""
ip\soket3=""
ip\soket4=""
ip\soket5=""
ip\soket6=""
ip\soket7=""
ip\soket8=""
ip\soket9=""
ip\soket10=""
ip\soket11=""
ip\soket12=""
ip\soket13=""
ip\soket14=""
ip\soket15=""
ip\soket16=""
ip\soket17=""
ip\soket18=""
ip\soket19=""
ip\soket20=""
ip\soket21=""
ip\soket22=""
ip\soket23=""
ip\soket24=""
ip\soket25=""
ip\soket26=""
ip\soket27=""
ip\soket28=""
ip\soket29=""
ip\soket30=""
Next
Print"Sokets clear."


;Main Schleife
ipserv=OpenTCPStream("127.0.0.1",8061)
Repeat
ip$=ReadString(ipserv)
If ip$="" Then Print"No new Client Requests." Goto s

If ip$=ip/soket1 Then Goto s
If ip$=ip/soket2 Then Goto s
If ip$=ip/soket3 Then Goto s
If ip$=ip/soket4 Then Goto s
If ip$=ip/soket5 Then Goto s
If ip$=ip/soket6 Then Goto s
If ip$=ip/soket7 Then Goto s
If ip$=ip/soket8 Then Goto s
If ip$=ip/soket9 Then Goto s
If ip$=ip/soket10 Then Goto s
If ip$=ip/soket11 Then Goto s
If ip$=ip/soket12 Then Goto s
If ip$=ip/soket13 Then Goto s
If ip$=ip/soket14 Then Goto s
If ip$=ip/soket15 Then Goto s
If ip$=ip/soket16 Then Goto s
If ip$=ip/soket17 Then Goto s
If ip$=ip/soket18 Then Goto s
If ip$=ip/soket19 Then Goto s
If ip$=ip/soket20 Then Goto s
If ip$=ip/soket21 Then Goto s
If ip$=ip/soket22 Then Goto s
If ip$=ip/soket23 Then Goto s
If ip$=ip/soket24 Then Goto s
If ip$=ip/soket25 Then Goto s
If ip$=ip/soket26 Then Goto s
If ip$=ip/soket27 Then Goto s
If ip$=ip/soket28 Then Goto s
If ip$=ip/soket29 Then Goto s
If ip$=ip/soket30 Then Goto s

If ip/soket1="" Then
Print"Soket'1' is reserved with the IP '"+ ip$ "'."
For t=1 To 100
ip.connections=New connections
ip\soket1=ip$
Next
;(...)


~~Edit~~
Okay hat sich erledigt... Aber jetzt habe ich ein anderen Error:
"Arithmetic operator cannot be applied to custom type objects" <== HÄÄ????
  • Zuletzt bearbeitet von Toasty am So, Apr 04, 2010 12:55, insgesamt einmal bearbeitet

Badudel

BeitragSo, Apr 04, 2010 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Debugger markiert die Zeile
Code: [AUSKLAPPEN]
ip$=ReadString(ipserv)

Hier wurde also ip bereits als ein anderer Variablentyp deklariert.
Weiter oben sehen wir
Code: [AUSKLAPPEN]
ip.connections=New connections

-> ip wird bereits als Type-Zeiger (oder wie man das nennt, hab ich wieder vergessen Laughing ) benutzt.

Um das zu verhindern, nennst du entweder ip.connections oder ip$=ReadString(ipserv) irgendwie um.

Grüße!
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!

hazumu-kun

BeitragSo, Apr 04, 2010 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Erzähl mir mal wieso du 30 "sokets" als felder hast?
1.) Es heißt "socket"
2.) GENAU so etwas soll ein Type verhindern!
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
  • Zuletzt bearbeitet von hazumu-kun am So, Apr 04, 2010 16:35, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSo, Apr 04, 2010 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Kürz' das doch sinnvoll...
BlitzBasic: [AUSKLAPPEN]
Type connections
Field soket[30]
End Type

Das Problem ist, das ip einmal connections ist, einmal String.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Toasty

BeitragSo, Apr 04, 2010 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt... ich bin blöd.

~~Edit~~
Aber laut BB Hilfe, ändert man mit Code: [AUSKLAPPEN]
For
eine der Code: [AUSKLAPPEN]
Type
Variablen...

Ist dies nicht so? Shocked

Gruß Toasty

mpmxyz

BeitragSo, Apr 04, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
So, wie deine Aussage bei mir ankommt, macht sie keinen Sinn.
Zwei mögliche Bedeutungen könnte ich mir darunter vorstellen.
1. Du möchtest jedes Type-Objekt durchgehen.
Mit diesem Konstrukt geht das:
BlitzBasic: [AUSKLAPPEN]
Local Referenz.TypeName
For Referenz=Each TypeName
;mache etwas mit dem Objekt, auf das die Referenz zeigt
Next

2. Du möchtest dich durch ein Array durcharbeiten.
Das geht so:
BlitzBasic: [AUSKLAPPEN]
Local index%
For index=0 To GroeßeDesArrays-1
Array[index]=...;etwas mit jedem Array-Eintrag machen
Next

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Badudel

BeitragSo, Apr 04, 2010 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst dir das so vorstellen:
Code: [AUSKLAPPEN]
for a.b = each b

bedeutet, dass a sich im Prinzip merkt, welchen Eintrag du ausgewählt hast. Wenn du noch eine andere Variable "daraufzeigen" lässt, merkt die sich, auf welchem Eintrag sie gerade steht.


Code: [AUSKLAPPEN]
For a.b Each b

lässt also a nacheinander auf b zeigen -> du veränderst mit dieser Schleife nur a!
Die Type-Einträge änderst du erst, wenn du
Code: [AUSKLAPPEN]
a\feld=123

aufrufst (-> feld wird an Stelle a in 123 geändert).

So ist das, wie ich es mir immer merke.
Wenn du jetzt aber a$="abc" machst, versuchst du, den Typ von a zu ändern.

Capito?

PS: Ja, ich weiß, so funktioniert es nicht wirklich, das ist nur vereinfacht dargestellt.
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!

Hubsi

BeitragSo, Apr 04, 2010 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Man ändert nicht die Variablen, der Pointer wird nur weiter geschoben.

Stell Dir ein Type-Konstrukt wie einen Schrank mit beliebig vielen Schubladen vor. In jedem der Schubladen ist ein Zettel auf dem Zahlen, Strings oder was weiß ich drauf steht drin. Und diese Each-Schleife macht nichts weiter als am Schrank bei der ersten Schublade zu beginnen, macht diese auf und nimmt den Zettel raus. Dann kannst Du vom Zettel ablesen, darauf rumkritzeln usw. und schließlich wird der Zettel wieder reingelegt. Wenn die Schleife weitergeht wird die Schublade wieder geschlossen, die nächste Schublade geöffnet, der Zettel rausgenommen...

Alles klar? Very Happy


Edit: Da war einer schneller Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group