2017-11-03 2 views
1

verwenden, wie ich static_cast mit Gussarten wie das verwenden können:Wie static_cast mit Doppel Casting

CString response; 
resultData = (void *) (const char *) response; 

wo Ergebnisdaten void *& eingeben.

Ich habe versucht, dies in folgenden Weise zu tun:

resultData = static_cast<(void*)(const char*)>(response); 
resultData = static_cast<void*>(static_cast<const char*>(response)); 

aber es funktioniert nicht.

Haben Sie irgendwelche Ideen?

+1

Verwenden Sie 'const_cast' – user0042

+1

passen Sie auf, weil undefined Verhalten klopft an Ihre Tür –

+0

Sind Sie sicher, dass Sie ein' CString' in einen Zeiger mit einem Cast konvertieren können? – moooeeeep

Antwort

2

Sie müssen entweder auf const void * würfen

resultData = static_cast<const void*>(static_cast<const char*>(response)); 

Oder Sie brauchen const_cast zu verwenden (die const entfernen erforderlich ist, static_cast kann es nicht entfernen):

resultData = static_cast<void*>(const_cast<char *>(static_cast<const char*>(response))); 

Hinweis: Wenn Ihr resultData ist void *, dann wird die Umwandlung in void * nicht benötigt.

+0

Das Problem ist, dass' resultData' 'void * &' ist, das nicht an eine temporäre gebunden werden kann. dh das Ergebnis von 'static_cast' – bolov

+0

Ich löste dieses Problem, indem ich' char * data = response.GetBuffer (response.GetLength()); 'und dann diesen Puffer freigab - das gibt mir eine Kopie von CString im Datenpuffer gespeichert Teil der MFC-API – drewpol

+0

@ Bolov: Ich denke, dass das OP hat es als Funktionsparameter. Wie 'void-Funktion (void * & resultData) {}' – geza