Veröffentlicht 22. Oktober 200123 j Hi, ich hab ein Problem mit Variablen. In einem Header von einem Hersteller wird eine Konstante mit "define" definiert: #define SQLILRL "RL" Wenn ich diese Variable im Programm verwende, kommt folgende Fehlermeldung: : error C2664: '_mbscat' : Konvertierung des Parameters 2 von 'unsigned char' in 'const unsigned char *' nicht moeglich Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat Kann mir wer helfen, und mir sagen, wie ich die Variable Konvertieren muss?
22. Oktober 200123 j Es handelt sich hier nicht um eine Konstante sondern um eine Symbol-Konstante. Der mit #define definerte Wert wird nicht als Speicheradresse initialisiert, sondern ruft nur ein Compiler-Replace hervor. Wie sieht den deine Referenz aus? Du musst vermutlich den Aufruf, oder die Definition ändern.
22. Oktober 200123 j uups, habe leider den Aufruf vergessen, also hier ist der Aufruf der Funktion : nSqlCode = sqlsil (g_SqlCur, SQLILRL);
22. Oktober 200123 j Schön, aber wie ist nSqlCode deklariert, von welchem Typ erwartet es den 2. Parameter ??? String-Literale sind immer vom Typ const char* (nix anderes ist das durch den preproz eingesetzte "RL"), das scheint ja nicht zu passen :confused:
22. Oktober 200123 j Das Problem ist, das sowohl die Funktion sqlsil wie auch nSQLCode von dem Hersteller vordefiniert sind, und ich diese leider net ändern kann, ich habe auch keine Informationen was die Funktion tut, kenne nur den Übergabeparameter (eben unsigned char *, der erste ist unsigned short) und weiß was ich mit dem Return anfangen soll... Ich brauch eigentlich nur ne Funktion, die mir aus dem SQLILRL ein unsigned char macht... Vielleicht kann mir trotzdem jemand helfen, ich kenn mich mit C++ net so aus, und interessier mich eigentlich net dafür, nur muss ich mich damit in der Firma damit beschäftigen...
22. Oktober 200123 j cast it, baby: nSqlCode = sqlsil (g_SqlCur, [b](unsigned char*)[/b] SQLILRL); <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> (...) ich kenn mich mit C++ net so aus, und interessier mich eigentlich net dafür, nur muss ich mich damit in der Firma damit beschäftigen...
22. Oktober 200123 j Danke, das hat geholfen. @Captain: Ich hab während der Ausbildung festgestellt, daß diese Branche nicht das ist, was ich machen will , nun such ich was anderes...
22. Oktober 200123 j <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Bartleby: <STRONG>@Captain: Ich hab während der Ausbildung festgestellt, daß diese Branche nicht das ist, was ich machen will , nun such ich was anderes...</STRONG>
23. Oktober 200123 j Ich würde im Debugger noch mal checken, ob der Typ durch den Cast nicht verdreht wird, oder obs passt. Je nach dem ob irgendwelche pragma's im Einsatz sind oder nicht.
23. Oktober 200123 j Naja, solange sich die char-Werte in den symbolischen Konstanten alle innerhalb von ASCII-7 bewegen, also c <= 127, sollte durch den cast kein Verdreher auftreten. @bartleby: schau dir die #defines an, wenn keine Umlaute/Sonderzeichen oberhalb ascii(127) vorkommen, besteht keine Gefahr.
23. Oktober 200123 j Ich sagte doch schon, daß es funktioniert, habe nun nur noch ein paar Probleme mit "Doppeldefinitionen" wegen diverser HEader, aber das krieg ich auch noch irgendwie hin... Thx anyway
24. Oktober 200123 j Ich hoffe, daß "//" meine Freunde werden, ich suche nur noch, wo sie hinwollen , hab da nicht wirklich den Durchblick ...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.