2015-04-04 4 views
0

Пусть у нас есть эти 2-структура:C член структуры в пределах структуры функционировать

struct date 
{ 
    int date; 
    int month; 
    int year; 
}; 

struct Employee 
    { 
    char ename[20]; 
    int ssn; 
    float salary; 
    struct date dateOfBirth; 
}; 

Если я хочу использовать к члену структуры, чтобы отправить его в функцию, скажем, мы имеем эту функцию:

void printBirth(date d){ 
    printf("Born in %d - %d - %d ", d->date, d->month, d->year); 
} 

я понимаю, если им определение работника и я хочу, чтобы напечатать свою дату рождения, я хотел бы сделать:

Employee emp; 
emp = (Employee)(malloc(sizeof(Employee)); 

emp->dateOfBirth->date = 2; // Normally, im asking the user the value 
emp->dateOfBirth->month = 2; // Normally, im asking the user the value 
emp->dateOfBirth->year = 1948; // Normally, im asking the user the value 


//call to my function : 
printBirth(emp->dateOfBirth); 

Но когда я делаю это, я получаю сообщение об ошибке: warning: передавая аргумент 1 из 'functionName' (в нашем случае это будет printBirth) из несовместимого типа указателя.

Я знаю, что было бы проще, если бы функция работала с указателем даты структуры, но у меня нет этой опции. Функция должна получать дату структуры как параметры.

Так что я хотел знать, как я могу передать структуру, определенную внутри структуры, функции.

спасибо.

+3

'Employee * emp; emp = (Employee *) (malloc (sizeof (Employee)) emp-> dateOfBirth.date = 2; '... – BLUEPIXY

+0

В зависимости от компилятора вам может потребоваться либо префикс Employee, либо дата с struct like' struct Employee' или использовать typedefs, например 'typedef struct {...} Employee'. – holgac

+0

или' Employee emp = {"", 0, 0.0f, {2,2,1948}}; '..'printBirth (emp. dateOfBirth); ' – BLUEPIXY

ответ

0

попробовать этот код

#include <stdio.h> 

typedef struct 
{ 
    int date; 
    int month; 
    int year; 
} date; 

typedef struct 
{ 
    char ename[20]; 
    int ssn; 
    float salary; 
    date dateOfBirth; 
} Employee; 

void printBirth(date *d){ 
    printf("Born in %d - %d - %d \n", d->date, d->month, d->year); 
} 

int main() 
{ 
    Employee emp; 

    emp.dateOfBirth.date = 2; 
    emp.dateOfBirth.month = 2; 
    emp.dateOfBirth.year = 1948; 

    printBirth(&emp.dateOfBirth); 
} 

Я хочу посоветовать использовать typedef когда Youre работает со структурами. если вы используете typedef, вам больше не нужно писать struct повсеместно, используя код typedef, более чистый, так как он предоставляет smidgen больше абстракции

Смежные вопросы