Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.09.2010, 13:42 Titel: Compilerfehler "Invalid assignment/conversion in ...&qu |
|
|
Warum kompiliert folgender Code unter FB0.20 einwandfrei:
Code: |
TYPE testfwd AS Object
TYPE Another
DECLARE FUNCTION Try(It AS testfwd PTR) AS INTEGER
DECLARE FUNCTION Me(i AS INTEGER) AS INTEGER
tmp AS INTEGER
END TYPE
FUNCTION Another.Try(It AS testfwd PTR) AS INTEGER
RETURN 0
END FUNCTION
FUNCTION Another.Me(i AS INTEGER) AS INTEGER
RETURN 0
END FUNCTION
TYPE Object
x AS INTEGER
y AS INTEGER
w AS INTEGER
h AS INTEGER
Another AS Another PTR
END TYPE
DIM a AS object
DIM b AS INTEGER
b = a.y
SLEEP
|
Und folgender NICHT:
Code: |
TYPE testfwd AS Object
TYPE Another
DECLARE FUNCTION Try(It AS testfwd PTR) AS INTEGER
DECLARE FUNCTION Me(i AS INTEGER) AS INTEGER
tmp AS INTEGER
END TYPE
FUNCTION Another.Try(It AS testfwd PTR) AS INTEGER
RETURN 0
END FUNCTION
FUNCTION Another.Me(i AS INTEGER) AS INTEGER
RETURN 0
END FUNCTION
TYPE Object
x AS INTEGER
y AS INTEGER
w AS INTEGER
h AS INTEGER
Another AS Another PTR
END TYPE
DIM a AS object
DIM b AS INTEGER
b = a.x
SLEEP
|
???
Code: |
error 159: Invalid assignment/conversion in 'b = a.x'
|
Warum funktioniert b = a.y und b = a.x nicht??
Sorry, hab echt schon lange keine Verständnisfrage mehr gehabt :-/ .. aber jetzt komm ich nicht weiter
Editiert durch Moderator: Threadtitel (ursprünglich "HIIILLLFFFEEE!!einseinself") geändert. (Sebastian)
Hmm.. schade, ich fand den titel gut...
Zuletzt bearbeitet von OneCypher am 01.09.2010, 15:39, insgesamt 4-mal bearbeitet |
|
Nach oben |
|
 |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 01.09.2010, 14:06 Titel: |
|
|
Hab zwar keine Lösung aber unter 0.22 ist es das selbe.
Witzig find ich y w h funktionieren. Wenn man an erster Stelle noch Variable einfügt funktioniert x auch, aber entsprechend die erste nicht. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.09.2010, 14:20 Titel: |
|
|
Ok, schon mal eine gute nachricht, dass es nicht an meiner version liegt ...
Hab den quelltext oben noch mal etwas entschlackt... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 01.09.2010, 15:21 Titel: |
|
|
und in der heutigen stunde lernen wir: Wie wähle ich den dümmsten thread titel, den das forum je gesehen hat!
außerdem kleiner tipp am rande: Wenn man die fehlermeldung dazuschreibt können einem vielleicht auch leute helfen, die den compiler nicht selbst installiert haben, oder den fehler aus anderen gründen nicht selbst reproduzieren können.
spontan übrigens: another as another ptr? Du nennst das feld in dem type genauso wie der datentyp? das klingt erstmal gefährlich, keine ahnung ob sowas mit fb funktioniert aber nenn doch das feld einfach mal anders als der datentyp heißt. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 01.09.2010, 15:31 Titel: |
|
|
Es liegt zumindest am Übergabeparameter der Funktion 'Try' im UDT 'Another'. Sollte also ein Fehler im Forwarding sein. Der Fehler beschränkt sich auch nicht auf 'a.x' sondern eben auf das erste Element desy UDTs 'Object'.
Könnte sein, dass beim Forwarding das UDT manipuliert wird.
Es kompiliert, wenn man b so definiert:
Code: | Dim b As TypeOf(a.x) |
Das hilft aber keinem was, weil man b danach nicht verwenden kann. Eine andere Möglichkeit wäre folgendes:
Code: | b = *Cast(Integer Ptr, @a.x) |
Das funktioniert ganz gut.
Das sieht für mich also nach einem Bug aus. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.09.2010, 15:44 Titel: |
|
|
Ok, Sebastian hat den titel schon geändert und ich habs noch mal etwas genauer geschrieben..
@MOD: Ja tatsächlich! Anscheinend wird der Datentyps der ersten Variable "zerstört" :-/ .. Schade, dass man nicht rausbekommen kann, welcher Datentyp dort dann zugewiesen wird.
Nun hab ich schon zwei fehler, die ich auf sourceforge beim FBC-Projekt melden möchte.. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.09.2010, 15:48 Titel: |
|
|
Anscheinend möchte FBC die TYPEs vor den Funktionen stehen haben.
Code: | Type testfwd As Object
Type Another
Declare Function Try(It As testfwd Ptr) As Integer
Declare Function Me(i As Integer) As Integer
tmp As Integer
End Type
Type Object
x As Integer
y As Integer
w As Integer
h As Integer
Another As Another Ptr
End Type
Function Another.Try(It As testfwd Ptr) As Integer
Return 0
End Function
Function Another.Me(i As Integer) As Integer
Return 0
End Function
Dim a As Object
Dim b As Integer
b = a.x
Sleep | Damit gehts! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.09.2010, 16:03 Titel: |
|
|
@volta: OHA! da hätt ich nicht dran gedacht.. aber .. das ist eher ein workaround oder? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 01.09.2010, 16:25 Titel: |
|
|
Scheinbar ist der Datentyp von 'a.x' im ersten Code 'Object'. Schon seltsam... |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.09.2010, 16:45 Titel: |
|
|
Ich fürchte .. ja!
Der FBC compiliert den Quelltext so ja nicht, sondern gibt die Fehlermeldung vorher aus.
Anscheinend kommt ihm hier tatsächlich bei der Überprüfung der erste Eintrag des TYPEs abhanden.
Warum das aber in meinem Beispiel nicht passiert
.. doch ein Bug im FBC ? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 01.09.2010, 17:14 Titel: |
|
|
Mal reduziert:
Code: | type testfwd as test
dim as testfwd variable
type test
a as integer
b as integer
end type |
Fehlermeldung:
Code: | test.bas(3) error 66: Incomplete type, before 'variable' in 'dim as testfwd variable' |
Ich vermute folgendes: Der Compiler arbeitet nach wie vor von oben nach unten ab und kennt nur das, was bisher deklariert wurde. Das heißt: Der UDT test ist schon irgendwie bekannt, weil auf ihn geforwardet ( ) wird, sein Inhalt jedoch noch nicht nicht! Vielleicht kommt er deswegen bei den Funktionsdeklarationen durcheinander? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.09.2010, 17:23 Titel: |
|
|
@nemored:
So richtig "reduziert" ist dein code nicht, denn er erzeugt einen anderen fehlercode..
Und eigentlich ist dieses forwarding ja nur dafür geeignet pointer eines datentyps definieren zu können bevor der gewünschte datentyp definiert ist..
Dann sähe dein Code so aus:
Code: |
type testfwd as test
dim variable as testfwd ptr
type test
a as integer
b as integer
end type
sleep
|
Und der kompiliert zumindest
Und mehr mache ich in meinem beispielcode eigentlich auch nicht .. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 01.09.2010, 17:27 Titel: |
|
|
Ja, ist richtig; ist mir nach dem Absenden auch aufgefallen. Ich habe es trotzdem mal stehen gelassen, weil vielleicht trotzdem bei der Funktionendefinition irgendwie der Type-Inhalt verwurschtelt wird. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.09.2010, 17:29 Titel: |
|
|
noch ein Gedicht
Code: | Type testfwd As Object
Type Another
Declare Function Try(It As testfwd Ptr) As Integer
Declare Function Me(i As Integer) As Integer
tmp As Integer
End Type
Function Another.Try(It As testfwd Ptr) As Integer
Return 0
End Function
Function Another.Me(i As Integer) As Integer
Return 0
End Function
Dim b As Integer
Type Object
x As Integer
y As Integer
w As Integer
h As Integer
Another As Another Ptr
End Type
Dim a As Object
b = a.x
Sleep | nur die Reihenfolge geändert und es geht auch ...  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 01.09.2010, 17:34 Titel: |
|
|
Also muss b nur vor dem UDT deklariert werden und schon ist alles gut!? Keine Ahnung was da los ist... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 01.09.2010, 17:35 Titel: |
|
|
Das ist ja lustig  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.09.2010, 18:01 Titel: |
|
|
noch ein Gedicht
Code: | TYPE testfwd AS Object
TYPE Another
DECLARE FUNCTION Try(It AS testfwd PTR) AS INTEGER
DECLARE FUNCTION Me(i AS INTEGER) AS INTEGER
tmp AS INTEGER
END TYPE
FUNCTION Another.Me(i AS INTEGER) AS INTEGER
RETURN 0
END FUNCTION
FUNCTION Another.Try(It AS testfwd PTR) AS INTEGER
RETURN 0
END FUNCTION
TYPE Object
x AS INTEGER
y AS INTEGER
w AS INTEGER
h AS INTEGER
Another AS Another PTR
END TYPE
DIM a AS Object
DIM b AS INTEGER
b = a.x
SLEEP | na, was wurde hier geändert?
Ich wette das ist ein bug im FBC aber wie soll man das erklären?
Ich möchte diesen Fehler nicht suchen.
(... und wer macht auch schon solche Konstruktionen.... ) _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 02.09.2010, 12:54 Titel: |
|
|
*lol* das gibts doch nich .. das ist echt ein seltsamer "bug" .. kaum vertauscht man die funktionen, schon klappt wieder..
Um so schwieriger ist es natürlich genau zu definieren was da der fehler ist und zu beschreiben was ich es den fbc-entwicklern auf sourceforge berichten kann :-/
Aber immerhin hab ich schon mal ein workaround für mein projekt, danke an volta
Ach, so konstrukte entstehen schnell: So viele programmierer es gibt, so viele möglichkeiten einer implementation gibt es ..
Wie man hier nahe bei köln sagt "Jede Jäck is aners" .. allerdings sagt man hier auch "Et hätt noch immer joht jejange" .. was beim stadtarchiv nich zutrift... aber ich schweife ab XD ...
Vielleicht hat einer eine idee, wie ich die beschreibung für nen bug-report konkretisieren kann? |
|
Nach oben |
|
 |
|