🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #7893

Vraag ivm Glib2's GType en GObject systeem

#7893
From: mikoyan
Date: Fri, 19 Jul 2002 13:36
53 lines
2956 bytes
Greetingz,

ik zal eerst hier maar eens proberen om men probleempje voor
te schotelen.

Ik ben bezig met het verkennen van GType en GObject van Glib2,
en om een beetje da boeltje te snappen haddek 2 eenvoudige
"classes" gemaakt, "Car" en "LuxeCar".

Op Car staat "��n virtuele methode" (tsn quotes, want eigenlijk
is dit terminologie gereserveerd voor echt OOPL's)  gedefinieerd,
nl "print_data", dat niets meer of nix minder doet dan de waarden
van zen attributen afprinten.

Nu zit het probleem natuurlijk bij die virtuele methode. In men
testje doe ik :
car_print_data((Car*)luxecar);

met void car_print_data(Car *self):
void car_print_data(Car *self) {
	CarClass *klass = (CarClass*) CAR_CLASS(G_OBJECT_GET_CLASS( G_OBJECT(self)));
	klass->print_data((Car*)self);
}

print_data van klass objectje wijst naar luxe_car_impl_print_data
static void luxe_car_impl_print_data(Car *self) {
	LuxeCar *luxe_car = (LuxeCar*) LUXE_CAR(self);
	parent_class->print_data(self);
	printf("Luxe tax : %d\n", luxe_car->luxetax);
}

met parent_class een global static var.

Enfin, het probleem zit em in CarClass *klass = (CarClass*) CAR_CLASS(G_OBJECT_GET_CLASS( G_OBJECT(self)));

Wanner ik men programma uitvoer krijg ik :
(process:2384): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GObject'

(process:2384): GLib-GObject-WARNING **: invalid class cast from (NULL) pointer to `Car'

en bij klass->print_data() segfault het, omdat klass waarschijnlijk nog
steeds NULL is.

En ik snap niet hoedat komt.

Het extra rare hier aan is, dat luxe_car_new() vroeger degelijk LuxeCar* object returnde
en dat luxe_car_impl_print_data ook LuxeCar* als argument had, dat het
toen wel werkte

Heeft iemand een idee? Het is misschien nogal moeilijk volgen over wat ik
het heb :) maar ik probeer maar...

TIA, greetz, Mikoyan
Technical Details
Message-ID: <pan.2002.07.19.13.26.01.979524.2488@netscape.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news1.google.com!sn-xit-02!sn-xit-05!sn-xit-01!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!news.algonet.se!algonet!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,51afcd67cac64b8c,start
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-07-19 06:39:00 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news1.google.com!sn-xit-02!sn-xit-05!sn-xit-01!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!news.algonet.se!algonet!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: mikoyan <hckx@netscape.net>
Subject: Vraag ivm Glib2's GType en GObject systeem
Newsgroups: be.comp.programming
Message-ID: <pan.2002.07.19.13.26.01.979524.2488@netscape.net>
User-Agent: Pan/0.11.3 (Unix)
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Comment-To: ALL
Lines: 53
Date: Fri, 19 Jul 2002 13:36:12 GMT
NNTP-Posting-Host: 213.224.187.21
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1027085772 213.224.187.21 (Fri, 19 Jul 2002 15:36:12 MET DST)
NNTP-Posting-Date: Fri, 19 Jul 2002 15:36:12 MET DST
Organization: Telenet Internet