2017-02-18 2 views
1

Я работаю над алгоритмом дерева. Эти структуры в моей программе:Доступ к структуре в структуре

typedef struct{ 
    double m; 
    double x[DIM]; 
    double v[DIM]; 
} Particle; 

typedef struct{ 
    double lower[DIM]; 
    double upper[DIM]; 
} Box; 

typedef struct Node{ 
    Particle p; 
    Box box; 
    struct Node *son[4]; 
} Node; 

Теперь я написал функцию myFunctA(), которая определяется по формуле:

void myFunctA(Particle *p, Node *t){ 
    int b=soNum(&t->box, &t->son->box, p); // Why does "&t->son->box" not work? 
// do stuff ... 
} 

В рамках функции myFunctA() Я хочу, чтобы передать box из t и box от son от t до функции soNum(). soNum() дается

int soNum(Box *box, Box *sonbox, Particle *p){ 
// do stuff ... 
} 

Я пытаюсь сделать это с помощью &t->son->box, который не работает. Я также пробовал (&t->son)->box. Я получаю ошибку всегда:

error: request for member ‘box’ in something not a structure or union 
    int b=soNum(&t->box, &t->son->box, p); 

Я думаю, что это легко, но я до сих пор совершенно новой для C и найти его как-то трудно увидеть. Я надеюсь, что кто-то может мне помочь!

+0

't-> Сон-> коробка' должно быть что-то вроде 't-> сын [INDEX] -> box' – PSkocik

ответ

2

Оператор -> применяется к указателю, а не к struct. t - это указатель, поэтому t->son верен. Однако son is не указатель, это массив указателей. Поэтому

t->son->box 

должен быть

t->son[someIndex]->box 

, где someIndex является выражением оценки к int между нулем и три, включительно.

+0

@interjay Спасибо за редактированием! – dasblinkenlight

2

t->son->box должно быть чем-то вроде t->son[INDEX]->box (son - это массив указателей узлов).

компилируется:

#define DIM 3 
typedef struct{ 
    double m; 
    double x[DIM]; 
    double v[DIM]; 
} Particle; 

typedef struct{ 
    double lower[DIM]; 
    double upper[DIM]; 
} Box; 

typedef struct Node{ 
    Particle p; 
    Box box; 
    struct Node *son[4]; 
} Node; 

int soNum(Box *box, Box *sonbox, Particle *p){ 
// do stuff ... 
    return 0; 
} 
void myFunctA(Particle *p, Node *t){ 
    int b=soNum(&t->box, &t->son[0]->box, p); // Why does "&t->son->box" not work? 
// do stuff ... 
} 
Смежные вопросы