Probleme mit defines
-
ich habe mir eine Header in mein Projekt eingebunden, in der ich alle Strings und feste Zahlenwerte drin hab. Als Beispiel steht dann in meiner defines.h
#define SURE "Sind sie sicher, dass sie " #define DOCCHANGES "das Dokument mit eingetragenen Angaben übernehmen wollen?"
jetzt wollte ich sowas wie das hier machen:
if(AfxMessageBox( SURE + DOCCHANGES ,MB_YESNO) == IDYES)
Jetzt bekomm ich aber die Meldung
cannot add two pointers
woran liegt das und wie kann ich das beheben?
Danke schon mal für alle Antworten.
-
Deine defines repräsentieren nur char-Pointer auf die jeweiligen Strings. Um diese zu kombinieren, mußt Du strcat verwenden.
-
Es reicht, wenn du das Plus einfach weglässt.
-
Meckert der dann nicht wegen zweimal " hintereinander?
Das wäre dann doch
"Sind sie sicher, dass sie " "das Dokument mit eingetragenen Angaben übernehmen wollen?"
-
Nein.
-
kann ich in meinen defines irgendwie strings anlegen? Weil ich hab es jetzt so,
char string[80]; strcpy( string, SURE ); strcat( string, DOCCHANGES ); if(AfxMessageBox( string ,MB_YESNO) == IDYES)
und finde das nicht gerade elegant, wie geht das schöner?
-
So:
dEUs schrieb:
Es reicht, wenn du das Plus einfach weglässt.
-
genau das von DEUs wollte ich danke euch allen, ich hab den Beitrag geschrieben wo dein Post kam, drum mein letzter Post.
Klasse, Danke
-
*merk*
Dann habe ich wohl bei den Defines mal nicht ausgepasst. Ich dachte immer, das wäre sture Textersetzung.
Danke, wieder was gelernt.
-
estartu_de schrieb:
Dann habe ich wohl bei den Defines mal nicht ausgepasst. Ich dachte immer, das wäre sture Textersetzung
Ist es auch. Bin aber auch noch nie auf den Gedanken gekommen, das "1""2""3" "123" ergibt. Statt dessen habe ich auch immer fröhlich concat benutzt.
-
wieso sture Textersetzung?
Ich kann ja auch#define SPALTE_PCD (short index =0)
oder
#define BGRGB (255,255,255)//<-- auch kein Text!
-
Manfred Schmidtke schrieb:
estartu_de schrieb:
Dann habe ich wohl bei den Defines mal nicht ausgepasst. Ich dachte immer, das wäre sture Textersetzung
Ist es auch. Bin aber auch noch nie auf den Gedanken gekommen, das "1""2""3" "123" ergibt. Statt dessen habe ich auch immer fröhlich concat benutzt.
ZUm Glück schmeißt ein ANfänger wie ich sowas mal in die Runde!
-
Naja, ich kenne das so, wenn du sowas hast:
#define DEF 375 int a = DEF;
Darauf wird dann:
int a = 375;
Und wenn man sowas macht:
#define DEF2 370; if (a == DEF2)
Dann gibts fette Fehler.
Ich meinte halt, dass der Platzhalter (das DEF oder so) durch den Rest der Zeile stur ersetzt wird.
-
Ja, das ist ja acuh so.
Aus
#define TEXT1 "Text1" #define TEXT2 "Text2" MessageBox(TEXT1 TEXT2);
wird
MessageBox("Text1" "Text2");
Und diese Zeile wird dem Kompiler übergeben.
Und da das gleichbedeutend ist mit
MessageBox("Text1Text2");
kompiliert er es auch ohne Probleme.
-
Polofreak schrieb:
wieso sture Textersetzung?
Ich kann ja auch#define SPALTE_PCD (short index =0)
oder
#define BGRGB (255,255,255)//<-- auch kein Text!
Du hast was falsch verstanden.
Die defines werden vom Präprozessor verarbeitet. Und er ersetzt den Text SPALTE_PCD durch (short index =0) in deinem Quellcode. Und erst dieser bearbeitete Quellcode wird dann dem Kompiler übergeben. Das war mit Textersetzung gemeint.
-
Achsooo, der Denkfehler war nicht bei den defines sondern bei der Vorgehensweise des Compilers.
Okay, DA fehlt mir noch so einiges.
Das sind die Details, zu denen es irgendwie keine wirkliche Sammlung gibt.
-
Ok jetzt hab glaub sogar ich das verstanden!
@ESTARTU_DE dann sammle diesen ganzen Details schreib ein Buch drüber und werde reich, beteilige mich mit 20% :p weil ich das Thema grad in die Runde geworfen hab
-
Leider wird man mit solchen Büchern nicht reich
-
Wär das nicht (in gekürzter Form) was für die FAQ?
-
Wenn du magst, kann du ja einen gekürzten Beitrag schreiben. Ich verschieb ihn dann in die C++-FAQ.
-
Okay, morgen.