 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Stefan Goerres Guest
|
Posted: Wed Apr 14, 2004 7:49 am Post subject: Pointer auf Bool? |
|
|
Hallo zusammen,
ich habe hier ein kleines Problem und zwar mit zwei eigensinnigen BOOL's ;)
In der Hauptroutine habe ich die zwei Werte
BOOL IsStarted = false;
BOOL IsConnected = false;
die gebe ich an an Funktion weiter welche einen Pointer übernehmen soll..
etwa so
fMakeMyDay(&IsStarted, &IsConnected);
diese soll die dann setzen so je nach Bedarf. Also in etwa so...
int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
Letzteres geht in die Hose Der Compiler sagt immer er könne nicht casten
? Bin ich nun total aufm Schlauch???? Oder gar Holzweg?
Danke
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Tibor Pausz Guest
|
Posted: Wed Apr 14, 2004 10:54 am Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres <lists (AT) gsysteme (DOT) de> wrote:
| Quote: | int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
|
Das ist ein Zeiger! Ergo vorher derefenzieren
*IsStarted = true;
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Gerd Schmitzer Guest
|
Posted: Wed Apr 14, 2004 12:54 pm Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres schrieb:
| Quote: | int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
Letzteres geht in die Hose Der Compiler sagt immer er könne nicht casten
? Bin ich nun total aufm Schlauch???? Oder gar Holzweg?
|
Entweder Pointer auflösen:
*IsStarted = true;
Aber: Da hier Pointer übergeben werden, immer auf != NULL
überprüfen! Ggf. eine Exception werfen.
if ( IsStarted ) *IsStarted = true;
Oder Call-By-Reference (so macht man das idR. für deinen
gewünschten Fall):
int fMakeMyDay( BOOL& IsStarted, BOOL& IsConnected ) ...
dann klappt auch:
IsStarted = true;
GS
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Lars H. Rohwedder Guest
|
Posted: Wed Apr 14, 2004 1:56 pm Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres <lists (AT) gsysteme (DOT) de> wrote:
| Quote: | Hallo zusammen,
ich habe hier ein kleines Problem und zwar mit zwei eigensinnigen
BOOL's
|
Wieso eigentlich BOOL? Was ist der Unterschied zum eingebauten Datentyp
bool? Bei letzterem weiß wenigstens jeder C++-Programmierer, was gemeint
ist, somit würde ich ihn immer bevorzugen.
| Quote: | int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
Letzteres geht in die Hose Der Compiler sagt immer er könne nicht
? casten Bin ich nun total aufm Schlauch???? Oder gar Holzweg?
|
Zumindest scheinst du nicht zu wissen, wie man mit Zeigern (Pointern)
umgeht. Vielleicht solltest du es dann sein lassen, und statt dessen
mit Referenzen arbeiten. Die sind leichter zu handhaben und man macht
weniger Fehler. (Darum wurden sie bei C++ ja auch eingeführt!) Also:
int fMakeMyDay(BOOL& iss, BOOL& isc)
{
iss = true;
}
und wenn du die Funktion aufrufst, brauchst du auch nicht mehr mit dem
Address-of-Operator rumzuhantieren, sondern schreibst einfach:
fMakeMyDay(IsStarted, IsConnected);
Am besten, du besorgst dir mal ein gutes Einsteigerbuch über C++.
(Empfehlungen gingen vor kurzem ja wieder durch diese Gruppe.) Damit du
gar nicht erst anfängst, C++ im C-Stil zu schreiben. Denn das ist und
bleibt immer hässlich und ... fehleranfällig.
Gruß,
Lars R.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Wed Apr 14, 2004 3:35 pm Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres wrote:
| Quote: | Hallo zusammen,
ich habe hier ein kleines Problem und zwar mit zwei eigensinnigen
BOOL's
|
Was ist 'BOOL'? Ein typedef für bool?
| Quote: | In der Hauptroutine habe ich die zwei Werte
BOOL IsStarted = false;
BOOL IsConnected = false;
die gebe ich an an Funktion weiter welche einen Pointer übernehmen
soll.. etwa so
fMakeMyDay(&IsStarted, &IsConnected);
|
Wieso nicht Referenzen?
| Quote: | diese soll die dann setzen so je nach Bedarf. Also in etwa so...
int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
Letzteres geht in die Hose Der Compiler sagt immer er könne nicht
casten ?
|
Sagt er bestimmt nicht. Casten tut der Compiler nie selbst, das macht
immer der Programmierer. Du meinst vermutlich 'konvertieren'.
| Quote: | Bin ich nun total aufm Schlauch????
|
Du weist den Wert true dem Zeiger zu, nicht dem, worauf er zeigt.
Nein. Wenn du:
*IsStarted = true;
schreibst, sollte es gehen.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Stefan Goerres Guest
|
Posted: Thu Apr 15, 2004 7:19 am Post subject: Re: Pointer auf Bool? |
|
|
Lars H. Rohwedder wrote:
| Quote: | Stefan Goerres <lists (AT) gsysteme (DOT) de> wrote:
Hallo zusammen,
ich habe hier ein kleines Problem und zwar mit zwei eigensinnigen
BOOL's ;)
Wieso eigentlich BOOL? Was ist der Unterschied zum eingebauten
Datentyp bool? Bei letzterem weiß wenigstens jeder C++-Programmierer,
was gemeint ist, somit würde ich ihn immer bevorzugen.
|
ja ich habe das auch gestern gesehen das es da einen Unterschied gibt.
Den Ursprungscode habe ich nicht geschrieben deswegen bin ich da nicht so
direkt drüber gestolpert bzw. habe mir keine Gedanken drüber gemacht.
| Quote: | int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
{
...
// und nun setzen
IsStarted = true;
Letzteres geht in die Hose Der Compiler sagt immer er könne nicht
? casten Bin ich nun total aufm Schlauch???? Oder gar Holzweg?
Zumindest scheinst du nicht zu wissen, wie man mit Zeigern (Pointern)
umgeht. Vielleicht solltest du es dann sein lassen, und statt dessen
mit Referenzen arbeiten. Die sind leichter zu handhaben und man macht
weniger Fehler. (Darum wurden sie bei C++ ja auch eingeführt!) Also:
int fMakeMyDay(BOOL& iss, BOOL& isc)
{
iss = true;
}
und wenn du die Funktion aufrufst, brauchst du auch nicht mehr mit dem
Address-of-Operator rumzuhantieren, sondern schreibst einfach:
fMakeMyDay(IsStarted, IsConnected);
|
Ja voll geil. Da ist man doch gleich richtig gut beraten. Gibt es da
irgendwelche Sonderfälle?
Mit Zeigern habe ich es echt nicht so. Aber wie lernt man das richtig? So
einfache Zeiger verstehe ich ja noch aber Zeiger auf Zeiger und ähnliches?
Grauenvoll!
| Quote: | Am besten, du besorgst dir mal ein gutes Einsteigerbuch über C++.
(Empfehlungen gingen vor kurzem ja wieder durch diese Gruppe.) Damit
du gar nicht erst anfängst, C++ im C-Stil zu schreiben. Denn das ist
und bleibt immer hässlich und ... fehleranfällig.
|
Hmmm wir haben hier welche rum zum liegen ... Werde mal in einer ruhigen
Minute das Studium vertiefen.
Danke
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Stefan Goerres Guest
|
Posted: Thu Apr 15, 2004 7:20 am Post subject: Re: Pointer auf Bool? |
|
|
Rolf Magnus wrote:
....
| Quote: | Sagt er bestimmt nicht. Casten tut der Compiler nie selbst, das macht
immer der Programmierer. Du meinst vermutlich 'konvertieren'.
Bin ich nun total aufm Schlauch????
Du weist den Wert true dem Zeiger zu, nicht dem, worauf er zeigt.
Oder gar Holzweg?
Nein. Wenn du:
*IsStarted = true;
schreibst, sollte es gehen.
|
einen morgen später habe ich mir das überlegt ;)
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Lars H. Rohwedder Guest
|
Posted: Thu Apr 15, 2004 10:14 am Post subject: Re: Pointer auf Bool? |
|
|
| Quote: | fMakeMyDay(IsStarted, IsConnected);
Ja voll geil. Da ist man doch gleich richtig gut beraten. Gibt es da
irgendwelche Sonderfälle?
|
Was für Sonderfälle meinst du?
| Quote: | Mit Zeigern habe ich es echt nicht so. Aber wie lernt man das
richtig? So einfache Zeiger verstehe ich ja noch aber Zeiger auf
Zeiger und ähnliches? Grauenvoll!
|
Dann sei froh, dass du bei C++ gelandet bist. Da brauchst du viel
weniger Zeigerverrenkungen als bei C.
Im Übrigen ist das mit den Zeigern eine recht einfache Sache. Trotzdem
kann man halt sehr leicht großen Bockmist machen. Darum überlege ich
mir meist 3mal, ob ich für eine Problemlösung Zeiger benutze oder obs
nicht auch besser ohne geht.
| Quote: | Am besten, du besorgst dir mal ein gutes Einsteigerbuch über C++.
(Empfehlungen gingen vor kurzem ja wieder durch diese Gruppe.) Damit
du gar nicht erst anfängst, C++ im C-Stil zu schreiben. Denn das ist
und bleibt immer hässlich und ... fehleranfällig.
Hmmm wir haben hier welche rum zum liegen ... Werde mal in einer
ruhigen Minute das Studium vertiefen.
|
Hoffentlich brauchbare Bücher... :-/
L.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marco Budde Guest
|
Posted: Thu Apr 15, 2004 6:18 pm Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres wrote:
Das ist kein ANSI C++, sondern der Schrott, den MS definiert.
Verwende bitte "bool" oder eine andere Newsgruppe .
Bei der ANSI Variante richtig, bei WIN32 falsch. Hier wäre
"FALSE" korrekt.
| Quote: | die gebe ich an an Funktion weiter welche einen Pointer übernehmen soll..
etwa so
fMakeMyDay(&IsStarted, &IsConnected);
diese soll die dann setzen so je nach Bedarf. Also in etwa so...
int fMakeMyDay(BOOL* IsStarted, BOOL* IsConnected)
|
So hätte man das in C gemacht, besser Referenzen, also:
int fMakeMyDay(bool &IsStarted, bool &IsConnected)
Außerdem sollten Get- bzw. Testmethode in der Regel immer nur
ein Ergebnis zur Zeit liefern und das meistens als Return
Value.
| Quote: | {
...
// und nun setzen
IsStarted = true;
|
Das wäre bei den Referenzen richtig. Du arbeitest mit Pointern, also
*IsStarted = TRUE
cu, Marco
--
S: Minolta: Winkelsucher (VN), VC-9
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marco Budde Guest
|
Posted: Thu Apr 15, 2004 6:21 pm Post subject: Re: Pointer auf Bool? |
|
|
Stefan Goerres wrote:
| Quote: | Ja voll geil. Da ist man doch gleich richtig gut beraten. Gibt es da
irgendwelche Sonderfälle?
|
Nö.
| Quote: | Mit Zeigern habe ich es echt nicht so. Aber wie lernt man das richtig?
|
*Gute* Bücher lesen (Kernighan & Ritchie z.B.) und entwickeln,
entwickeln
und noch einmal entwickeln.
| Quote: | So
einfache Zeiger verstehe ich ja noch aber Zeiger auf Zeiger und ähnliches?
Grauenvoll!
|
In C++ braucht man selten Zeiger.
| Quote: | Hmmm wir haben hier welche rum zum liegen ... Werde mal in einer ruhigen
Minute das Studium vertiefen.
|
Leider gibt es auf dem Buchmarkt viel Müll. Deutsche Verlage scheinen
nicht fähig zu sein, hochwertige Bücher auf den Markt zu bringen.
Schau insb. beim US-A&W.
cu, Marco
--
S: Minolta: Winkelsucher (VN), VC-9
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|