AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [BCB] C++ Entsprechung zu Operator "is"
Thema durchsuchen
Ansicht
Themen-Optionen

[BCB] C++ Entsprechung zu Operator "is"

Ein Thema von messie · begonnen am 17. Apr 2008 · letzter Beitrag vom 18. Apr 2008
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

[BCB] C++ Entsprechung zu Operator "is"

  Alt 17. Apr 2008, 15:36
Moin,

wie der Titel schon sagt, möchte ich auf Komponenten eines Forms zugreifen. In Delphi habe ich ja z.B.if Owner.Components[i] is TControl then... Etwas Ähnliches würde ich gerne im BCB machen, mir fehlt aber der passende Befehl.

Danke, Messie
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#2

Re: [BCB] C++ Entsprechung zu Operator "is"

  Alt 17. Apr 2008, 15:45
Code:
dynamic_cast<Tx*>(x)
?
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: [BCB] C++ Entsprechung zu Operator "is"

  Alt 17. Apr 2008, 16:43
Zuerst habe ich ja gedacht, Dir wäre die Tastatur runtergefallen
Es funktioniert aber tatsächlich, vielen Dank schonmal.
Leider muss ich die Frage erweitern, denn ich möchte gerne auf die Kompo zugreifen und da brauche ich auch eine Entsprechung von

with dummy as TComponent... Ich möchte einer Kompo eine freie Fehlermeldung mitgeben, die beim Start initialisiert wird.

Code:
TComponent *comp;
TMyComp *dummy;
for (int i = 0;i < Main->ComponentCount;i++)
{
  if((comp = dynamic_cast< TMyComp *>(Main->Components[i])) != 0)
  {
    dummy = (TMyComp)(comp);
    dummy->ErrMsg = Msg01;
  }
}
Ich bekomme aber die Meldung, dass ich dummy mit new anlegen soll, was ich nicht für richtig halte, denn comp gibt es ja und ich möchte auch nur comp was mitgeben.

Grüße, Messie
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: [BCB] C++ Entsprechung zu Operator "is"

  Alt 17. Apr 2008, 17:57
Zitat von messie:
with dummy as TComponent...
Gibt es nicht.

Code:
TMyComp *comp;
for (int i = 0;i < Main->ComponentCount;i++)
{
  if((comp = dynamic_cast< TMyComp *>(Main->Components[i])) != NULL )
  {
    comp->ErrMsg = Msg01;
  }
}
1. Du machst doch schon einen typecast, warum nutzt du dann nicht dessen Ergebnis?
2. Warum vergleichst du eine Instanz auf 0 anstatt auf NULL?
3. Die Fehlermeldung hat vollkommen Recht, da VCL Objekte nicht als lokale Objekte in indirekter Instanziierung benutzt werden können, aber genau das versuchst du: Du castest auf den direkten Typ und nicht auf einen Zeiger auf deinen Typ.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: [BCB] C++ Entsprechung zu Operator "is"

  Alt 17. Apr 2008, 18:13
Zitat von Muetze1:
[Du machst doch schon einen typecast, warum nutzt du dann nicht dessen Ergebnis?
Weil: Kopieren (aus der Hilfe) geht vor Kapieren...

Danke, Messie
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: [BCB] C++ Entsprechung zu Operator "is"

  Alt 18. Apr 2008, 21:11
Zitat von Muetze1:
2. Warum vergleichst du eine Instanz auf 0 anstatt auf NULL?
Was genau spricht dagegen? Defacto ist es portabler. NULL hingegen ist in einigen Implementationen typisiert (oder, schlimmer, mit #define und C-Typecast definiert) und dann wird es bei manchem C++-Compiler (und mitgelieferten Headern) mehr als nur eine Geschmacksfrage, ob man 0 oder NULL benutzt.

Das wird allerdings ohnehin nur ein Problem wenn man C und C++ (bspw. dank Headern) mischt und so dank der Tatsache, dass der Praeprozessor keine Grenzen (wie Namespaces) kennt, in C++ ploetzlich mit sowas wie
Code:
#define NULL (void*)0
konfrontiert wird. In den meisten Faellen wird das dann an der strikten Typisierung von C++ scheitern. Und in C++-Headern wird in den meisten Faellen ohnehin direkt stehen:
Code:
#define NULL 0
so dass es irrelevant wird.

Das schoene an der 0 ist ja gerade, dass sie keinerlei Einheit braucht (bzw. Typ im C++-Jargon) um einen Sinn zu machen. Wenn man mal den Code nach dem Durchlauf des Praeprozessors anschaut, ist da ohnehin kein Unterschied mehr. Aber eben wenn man C und C++ Header mischt oder aehnliche Dinge tut, die bewirken, dass das
Code:
#define NULL 0
eben gerade nicht gilt. Dann ist es ein kleiner bis riesiger Unterschied, je nach Kontext. Bei den Worten "je nach Kontext" werden sich bei jedem erfahrenen Entwickler die Fussnaegel aufrollen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz