mam coś takiego:typedef stuct z deklaracją do przodu w C
typedef struct Data DATA, *DATA_PTR;
typedef struct Units UNITS, *UNITS_PTR;
struct Data
{
double miscData;
UNITS units;
};
struct Units
{
double x[2];
double y[2];
double z[2];
};
w moim pliku project_typedef.h
.
w innym pliku, mam coś takiego:
void fileInput(DATA_PTR data)
{
//usual declarations and other things
data->miscData = 0; //Works!
data->units.x[0] = 5; //Doesn't work
//etc...
}
Jednak to nie działa, ponieważ jednostki jest zadeklarowana po danych w project_typedef.h
(jeśli mogę zmienić kolejność to działa). Błąd, który dostaję, jest "po lewej stronie" .x 'musi mieć typ struct/union ". Myślałem, że deklaracja terminowa rozwiąże ten problem. Dlaczego nie?
Po pierwsze, że == wygląda dziwnie ... – Tudor
@Dziewczyna, literówka, ale to nie tak jest w moim kodzie. Jest teraz edytowany. – user1007692
Po prostu chcę powiedzieć, że nienawidzę, gdy widzę typy wskaźników używane jako normalny typ. DATA_PTR nie upraszcza pisania kodu w jakikolwiek sposób, ponieważ nadal jest wskaźnikiem i nadal musisz użyć operatora ->. –