Article View: be.comp.programming
Article #5152Re: een algoritme...
From: Roel Schroeven
Date: Wed, 14 May 2003 12:26
Date: Wed, 14 May 2003 12:26
46 lines
3743 bytes
3743 bytes
TRAX wrote:
>>Veiliger:
>>
>>void __fastcall TFrmhoofd::imgklik(TObject *Sender)
>>{
>> TImage *Image = dynamic_cast<TImage*>(Sender);
>> if (Image) {
>> int rij = (Image->Tag >> 16) & 0xff;
>> int kolom = Image->Tag & 0xff;
>> // ...
>> }
>>}
>
>
> t'is om van te bleiten :(
> ik doe hte op de veilige manier en dan krijg ik de volgende fout:
> Cannot cast from 'TObject *' to 'TImage'
> aangezien ik geen snars van dat stukje code snap, weet ik niet hoe de fout
> weg te krijgen :(
Korte uitleg: ben je het sterretje niet vergeten?
Lange uitleg:
De pointer die de functie binnenkrijgt is van het type TObject, maar kan
wijzen naar objecten van alle klassen die rechstreeks of onrechtstreeks
afleiden van TObject. Zowat alle VCL-klassen dus, onder andere TImage.
Tag is een property die niet bestaat voor TObject, wel voor TImage
(eigenlijk voor TControl en alles wat daarvan afleidt). Wat de compiler
niet weet maar jij en ik wel is dat de pointer in deze functie altijd
naar een TImage wijst, omdat ze enkel gebruikt wordt als event handler
voor TImage-objecten. Dus moeten we de compiler wijsmaken dat we te doen
hebben met een TImage: een cast dus. Een dynamic cast in dit geval. De
veilige vorm gaat checken of TImage wel degelijk afleidt van TObject, en
geeft een null-pointer als dat niet zo blijkt te zijn. In het andere
geval geeft dynamic_cast de pointer terug, maar dan met het gewenste
type. Het type dat we opgeven is het type van de pointer, dus er moet
een sterretje bij staan.
De quick and dirty methode, erfenis uit C, geeft altijd de pointer terug
zonder enige vorm van controle.
--
"Codito ergo sum"
Roel Schroeven
Technical Details
Message-ID:
<_Bqwa.1654$1u5.196@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newsfeed.online.be!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<T%awa.698$1u5.156@afrodite.telenet-ops.be> <fXdwa.1083$1u5.154@afrodite.telenet-ops.be> <y%kwa.1270$1u5.216@afrodite.telenet-ops.be> <8nmwa.1335$1u5.157@afrodite.telenet-ops.be> <Iumwa.1342$1u5.172@afrodite.telenet-ops.be> <1rnwa.1395$1u5.221@afrodite.telenet-ops.be> <FNnwa.1422$1u5.241@afrodite.telenet-ops.be> <n_nwa.1437$1u5.182@afrodite.telenet-ops.be> <37owa.1443$1u5.153@afrodite.telenet-ops.be> <%iowa.1456$1u5.237@afrodite.telenet-ops.be> <2Yowa.1503$1u5.257@afrodite.telenet-ops.be> <9zpwa.1546$1u5.247@afrodite.telenet-ops.be> <gPpwa.1558$1u5.25@afrodite.telenet-ops.be> <vVpwa.1571$1u5.234@afrodite.telenet-ops.be> <v3qwa.1580$1u5.263@afrodite.telenet-ops.be> <rbqwa.1590$1u5.60@afrodite.telenet-ops.be> <Ipqwa.1627$1u5.254@afrodite.telenet-ops.be> <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,dcf5f7295edf5117 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-05-14 05:30:37 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-09!supernews.com!newsfeed.online.be!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: Roel Schroeven <j4nff5m02@sneakemail.com> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030507 X-Accept-Language: nl-be, nl, en-us, en MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: een algoritme... References: <T%awa.698$1u5.156@afrodite.telenet-ops.be> <fXdwa.1083$1u5.154@afrodite.telenet-ops.be> <y%kwa.1270$1u5.216@afrodite.telenet-ops.be> <8nmwa.1335$1u5.157@afrodite.telenet-ops.be> <Iumwa.1342$1u5.172@afrodite.telenet-ops.be> <1rnwa.1395$1u5.221@afrodite.telenet-ops.be> <FNnwa.1422$1u5.241@afrodite.telenet-ops.be> <n_nwa.1437$1u5.182@afrodite.telenet-ops.be> <37owa.1443$1u5.153@afrodite.telenet-ops.be> <%iowa.1456$1u5.237@afrodite.telenet-ops.be> <2Yowa.1503$1u5.257@afrodite.telenet-ops.be> <9zpwa.1546$1u5.247@afrodite.telenet-ops.be> <gPpwa.1558$1u5.25@afrodite.telenet-ops.be> <vVpwa.1571$1u5.234@afrodite.telenet-ops.be> <v3qwa.1580$1u5.263@afrodite.telenet-ops.be> <rbqwa.1590$1u5.60@afrodite.telenet-ops.be> <Ipqwa.1627$1u5.254@afrodite.telenet-ops.be> <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be> In-Reply-To: <Qsqwa.1632$1u5.172@afrodite.telenet-ops.be> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Lines: 47 Message-ID: <_Bqwa.1654$1u5.196@afrodite.telenet-ops.be> Date: Wed, 14 May 2003 12:26:34 GMT NNTP-Posting-Host: 213.119.50.61 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1052915194 213.119.50.61 (Wed, 14 May 2003 14:26:34 MET DST) NNTP-Posting-Date: Wed, 14 May 2003 14:26:34 MET DST Organization: Telenet Internet