Unhandled Exception:Attempt to call abstract method

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

mpmxyz

Betreff: Unhandled Exception:Attempt to call abstract method

BeitragFr, Feb 05, 2010 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum bekommt dieser Code zur Laufzeit den oben genannten Fehler?
BlitzMax: [AUSKLAPPEN]
SuperStrict
Type TRuntimeErr
Method New()
Boom()
EndMethod
Method Boom() Abstract
EndType

Type TExt Extends TRuntimeErr
Method Boom()
Print "Boom!"
EndMethod
EndType

Local Obj:TExt=New TExt
Obj.Boom()

Dieser Code läuft stattdessen so, wie er soll:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Type TRuntimeErr
Method New()
'Boom()
EndMethod
Method MakeBoom()
Boom()
EndMethod
Method Boom() Abstract
EndType

Type TExt Extends TRuntimeErr
Method Boom()
Print "Boom!"
EndMethod
EndType

Local Obj:TExt=New TExt
Obj.MakeBoom()

Die New-Methode scheint seltsam zu sein...

Was soll das sein?
Ist das jetzt ein Bug oder ein Feature?

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

ChristianK

BeitragFr, Feb 05, 2010 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Erstellen einer Type-Instanz wird zuerst der Konstruktor des Parent-Type (in deinem Fall TRuntimeErr) aufgerufen. Von da aus ist die Boom-Methode abstrakt und kann nicht aufgerufen werden.

BlitzMax: [AUSKLAPPEN]
Strict

Type A
Method New()
Print "Konstruktor A"
End Method
End Type

Type B Extends A
Method New()
Print "Konstruktor B"
End Method
End Type

Local x:B = New B
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

mpmxyz

BeitragFr, Feb 05, 2010 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hätte ich ja auch halbwegs verstanden, wenn es keinen Laufzeitfehler sondern einen Compilerfehler geben würde.
->Bug, da das als Laufzeitfehler ziemlich sinnlos ist. (Der Fehler ist schon viel früher erkennbar.)
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

FireballFlame

BeitragSa, Feb 06, 2010 5:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur mal so als Frage, warum machst du dir eine eigene "TRuntimeErr"-Klasse?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

mpmxyz

BeitragSa, Feb 06, 2010 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Name dient nur zur Veranschaulichung, wo die Fehlermeldung kommt.
In Wirklichkeit läuft das ganze über eine "TGadget"-Klasse in einer GUI.
Da ich euch allerdings keine 1100 Zeilen antun wollte, habe ich ein neues, auf die Grundelemente reduziertes Beispiel geschrieben.

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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group