casten von Zeigern auf Strukturen

Gast #3648717
Lesenswert?
• ▲
▼
Hallo, ich möchte einen Zeiger auf eine Struktur in einen Zeiger casten.
Mein derzeitiger Code habe ich im folgenden niedergeschrieben. 
"diag_data_ptr" soll auf "diag_data" von "get_slave_diag_con_ptr" 
zeigen. Was muss ich ändern damit es funktioniert?

Danke!

Gruß
Samuel
1
typedef struct _T_DP_DIAG_DATA
2
{
3
   OCTET      station_status_1;                 
4
   OCTET      station_status_2;                           
5
   OCTET      station_status_3;                      
6
   USIGN8     master_add;    
7
   USIGN16    ident_number;           
8
   OCTET      ext_diag_data [DP_MAX_EXT_DIAG_DATA_LEN];  
9

10
} T_DP_DIAG_DATA;
11

12

13

14
typedef struct _T_DP_GET_SLAVE_DIAG_CON
15
{
16
   USIGN16          status;                                  
17
   USIGN8           rem_add;                                   
18
   USIGN8           dummy;                
19
   INT16            diag_entries;        
20
   USIGN16          diag_data_len;      
21
   T_DP_DIAG_DATA   diag_data;                           
22

23
} T_DP_GET_SLAVE_DIAG_CON;
24

25
main()
26
{
27
   T_DP_GET_SLAVE_DIAG_CON   FAR* get_slave_diag_con_ptr
28
   T_DP_DIAG_DATA    FAR *diag_data_ptr;
29

30
   diag_data_ptr = (T_DP_DIAG_DATA FAR*) (get_slave_diag_con_ptr)
31
}
#3648756
Lesenswert?
• ▲
▼
Wenn du das tun musst, ist meistens etwas komplett faul.

Denn ein T_DP_GET_SLAVE_DIAG_CON ist nun mal kein T_DP_DIAG_DATA . Es 
macht daher auch keinen Sinn, dem Compiler vorzulügen, das dem so wäre.

Was willst du wirklich tun? Bzw. welche Situation hast du tatsächlich?

Aus der Beobachtung, dass ein T_DP_GET_SLAVE_DIAG_CON Objekt einen 
Member vom Typ T_DP_DIAG_DATA enthält, schliesse ich, dass du eigentlich 
etwas ganz anderes willst, nämlich einen Pointer auf diesen Member 
einrichten
1
main()
2
{
3
   T_DP_GET_SLAVE_DIAG_CON * get_slave_diag_con_ptr;
4
   T_DP_DIAG_DATA          * diag_data_ptr;
5

6
...
7

8
   diag_data_ptr = get_slave_diag_con_ptr->diag_data;
9
}
Gast #3648771
Lesenswert?
• ▲
▼
Hallo,
Danke!
ja genau ich möchte einen pointer auf diesen member einrichten.

Bei:

diag_data_ptr = (T_DP_DIAG_DATA    FAR *) 
get_slave_diag_con_ptr->diag_data;

bringt mein mingw compiler allerdings folgende Fehlermeldung:

error: cannot convert to a pointer type diag_data_ptr = diag_data_ptr = 
(T_DP_DIAG_DATA    FAR *) get_slave_diag_con_ptr->diag_data;


Was muß ich tun, das es ohne Fehler compiliert werden kann?

Gruß
Samuel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren