Cast geht nicht, warum?
-
Ich habe einen etwas komplizierten Cast zu erledigen. Fragt nicht, ob ich die Typen ändern kann, da alles so vorgegeben ist, und ich damit keine andere Wahl habe.
also, ich habe einen typedef unsigned int handle_1_t; auf der einen Seite
und eine struct handle_2{ int id;} auf der anderen Seite.jetzt wird es kompliziert.
einen *typedef handle_2 h2_t
eine BackendFunktion:
int open_b(h2_t handle){}
und eine API-Funktion
int open_a(handle_1_t h3){}
meine Idee:
int open_a(handle_1_t h3){ h2_t = handle; *h3 = (unsigned int)handle; // jetzt habe ich den Pointer abgespeichert: int x=open_b(*handle); //[Error] incompatible type for argument 2 of `open_b' int x=open_b(handle); // [Warning] passing arg 1 of `open_b' from incompatible pointer type; }
Natürlich wieder stark vereinfacht, um das eigentlich Problem besser zur Geltung kommen zu lassen.
Habt ihr eine Ahnung was falsch ist? (Wahrscheinlich wieder ein dämlicher Fehler!)
-
Ich fürchte, du hast das schon zu stark vereinfacht, um dein Problem zu zeigen.
Mal langsam: open_b() erhält ein handle_1 (=unsigned int) und will den an open_a() weitergeben. open_a() erwartet einen h2_t (=Zeiger auf struct handle_2). Soweit richtig?
Da ist eine direkte Umwandlung nicht möglich. Eventuell könntest du den erhaltenen Parameter in einen struct verpacken, bevor du ihn weitergibst (bzw umgekehrt das Element rausgreifen).
-
ich seh gerade das da noch ein Fehler in meiner Beschreibung ist:
int open_b(h2_t handle){}
soll sein:
*int open_b(h2_t handle){}
ich habe das jetzt wie folgt gelöst:
**
int x=open_b{&handle};**und siehe da, der Compiler meckert nicht mehr. Ob das allerdings richtig ist? Muss ich wohl mal testen.
Ich versuche das ganze nochmal Verbal zu erklären:
Also ich habe einen unsigned integer(x), der einen Pointer(y) auf einen Handle(z) halten soll. Meiner Funktion wird nur der Pointer auf x übergeben. Die Funtion, die ich damit ansprechen muss will einen *y haben, damit sollte der Handle(z) übergeben worden sein.Hab ich es so besser erklärt?
-
Versuch dir mal klarzumachen, was du eigentlich vorhast. Was genau steht in deinem 'unsigned int' Wert? Und in welcher Beziehung steht der zu deiner Struktur?
(und wieso ist es überhaupt notwendig, den Handle mal als int und mal als Pointer durchzureichen?)
PS: Welche der angegebenen Funktionen ist vorgegeben? Und was für einen Einfluß hast du selber auf die Programmierung?
-
Alle Typen sind vorgegeben, und alle Funktionen auch, auf den Teil habe ich überhaupt kein Einfluss. Aber es funzt so, ich habe eine alte Mail gefunden, da hat mir der Designer die korrekte Übergabe geschrieben.
Trotzdem danke.