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:

Compilerfehler "Invalid assignment/conversion in ...&qu

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.09.2010, 13:42    Titel: Compilerfehler "Invalid assignment/conversion in ...&qu Antworten mit Zitat

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 traurig

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
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 01.09.2010, 14:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.09.2010, 14:20    Titel: Antworten mit Zitat

Ok, schon mal eine gute nachricht, dass es nicht an meiner version liegt happy...

Hab den quelltext oben noch mal etwas entschlackt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 01.09.2010, 15:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.09.2010, 15:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.09.2010, 15:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.09.2010, 15:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.09.2010, 16:03    Titel: Antworten mit Zitat

@volta: OHA! da hätt ich nicht dran gedacht.. aber .. das ist eher ein workaround oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.09.2010, 16:25    Titel: Antworten mit Zitat

Scheinbar ist der Datentyp von 'a.x' im ersten Code 'Object'. Schon seltsam...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.09.2010, 16:45    Titel: Antworten mit Zitat

Zitat:
.. workaround?

Ich fürchte .. ja! mit den Augen rollen

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 Hmmm....
.. 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 01.09.2010, 17:14    Titel: Antworten mit Zitat

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 ( mit den Augen rollen ) 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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 01.09.2010, 17:23    Titel: Antworten mit Zitat

@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 zwinkern

Und mehr mache ich in meinem beispielcode eigentlich auch nicht ..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 01.09.2010, 17:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.09.2010, 17:29    Titel: Antworten mit Zitat

noch ein Gedicht lachen
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 ... durchgeknallt
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.09.2010, 17:34    Titel: Antworten mit Zitat

Also muss b nur vor dem UDT deklariert werden und schon ist alles gut!? Keine Ahnung was da los ist...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 01.09.2010, 17:35    Titel: Antworten mit Zitat

Das ist ja lustig neutral lachen
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.09.2010, 18:01    Titel: Antworten mit Zitat

noch ein Gedicht lachen
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? durchgeknallt

Ich wette das ist ein bug im FBC weinen aber wie soll man das erklären?
Ich möchte diesen Fehler nicht suchen.
(... und wer macht auch schon solche Konstruktionen.... mit dem Kopf durch die Mauer wollen )
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 02.09.2010, 12:54    Titel: Antworten mit Zitat

*lol* das gibts doch nich happy .. 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 lächeln

Ach, so konstrukte entstehen schnell: So viele programmierer es gibt, so viele möglichkeiten einer implementation gibt es zwinkern ..
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
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 -> Allgemeine Fragen zu FreeBASIC. 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