Funktions Return Wert Problem
-
Hi Alle,
Gleich mal zu meinem Problem:
class Cwert { privat: char zeichen[2]; cWert() { ZeroMemory(&zeichen, sizeof(zeichen)); } char GetZeichen() { return *zeichen; } }; Cwert class_wert; char text[100]; strcpy(text, class_wert.GetZeichen());
so und in der strcpy zeile kommt dann dieser fehler:
error C2664: 'strcpy' : Konvertierung des Parameters 2 von 'char' in 'const char *' nicht moeglichKann mir einer bitte meinen Fehler aufzeigen?
Der obere Text ist frei per Hand also eventuelle Fehler bitte übersehen.
Es geht nur um den besagten Compilerfehler
-
strcpy erwartet einen pointer auf ein char array als zweiten operanden. du übergibst ihm nur ein char.
-
mit
return *zeichen;
gibst du das zurück auf das zeichen zeigt, was ein char ist. Es wird aber ein c_string erwartet, also ein Char * . Gib einfach zeichen direkt zurück. Der Rückgabewert muss dann auch als char * deklariert werden.
Ps.:Ein Array von 2 chars ist aber für c_strings nicht wirklich geeignet, da ja sowiso nur ein zeichen rein passt.
-
Nunja mein Problem ist folgendes
eigentlich ist die var "zeichen" kein Array ..
class Cwert { privat: char zeichen; cWert() { zeichen=0; } char GetZeichen() { return zeichen; } }; Cwert class_wert; char text[100]; strcpy(text, class_wert.GetZeichen());
Mit Hilfe von "zeichen" speicher ich wParam aus WM_CHAR
case WM_CHAR: class_wert.SetKeyCode(wParam); return 0;
In der Klasse steht:
void SetKeyCode(char key) { zeichen = key; }
ich hatte nur Probleme mit der Umwandlung (immernoch) und habe deshalb ein Array draus gemacht.
Ich bekomme es leider noch immer nicht hin.
Kann mir bitte einer die Umwandlung zeigen so das ich ein "char zeichen" in der MessageBox ausgeben kann?So geht zwar der Compiler mit 0 Error durch, aber ich bekomme nen Speicherfehler sobald ich eine Taste drücke.
MessageBox(NULL,(char*)class_wert.GetKeyCode(),"",MB_OK);
-
keine besonders hübsche lösung aber im prinzip sollte sowas funktionieren:
class Cwert { privat: char zeichen[2]; cWert() { zeichen[0]=0; zeichen[1]=0; } void SetKeyCode(char key) { zeichen[0] = key; } char* GetZeichen() { return zeichen; } }; Cwert class_wert; char text[100]; strcpy(text, class_wert.GetZeichen());
-
char text[2]; text[0]=class_wert.GetZeichen(); text[1]='\0'; MessageBox(NULL,text,"",MB_OK);
-
@japro .. das habe ich auch schon probiert
char* GetZeichen() { return zeichen; }
und das war die Compiler Antwort:
error C2440: 'return' : 'char' kann nicht in 'char *' konvertiert werden@Mirauder_Mo .. yo das geht .. zwar irgendwie "unschön" da man extra variable anlegen muss, aber es geht. danke euch!
-
sänger schrieb:
@Mirauder_Mo .. yo das geht .. zwar irgendwie "unschön" da man extra variable anlegen muss, aber es geht. danke euch!
Das kann man ja auch ändern.
char* GetZeichen() { char * ret = new char[2]; ret[0] = zeichen; ret[1} = '\0'; return ret; } ... MessageBox(NULL,class_wert.GetZeichen(),"",MB_OK);
[EDIT] F*** hab nicht mitgedacht, so kann man ja den speicher nicht wieder frei geben
-
sänger schrieb:
@japro .. das habe ich auch schon probiert
char* GetZeichen() { return zeichen; }
...
wenns dich noch interessiert lies mal den rest meiner änderungen. ich hab da nämlich mehr geändert als das.