Вы не можете оперировать с неизвестным типом.Если log_in()
не знает определения struct node
, он не может использовать его напрямую.Единственное, что он может сделать, это как-то получить указатель на переменную этого типа, а затем либо обработать его как необработанные данные (последовательность байтов), либо привести указанный указатель к указателю на известный тип log_in()
и работать с ним.
Вы также можете переопределить struct node
внутри log_in()
, что позволяет log_in()
работать с известным типом:
void log_in(void*);
void logged_in(char*, int);
int main(void)
{
int sel = '2';
if (sel == '2')
{
struct node
{
char name_log[20];
int passlog;
int user_point;
} tmp;
log_in(&tmp);
if (tmp.passlog)
logged_in(tmp.name_log, tmp.user_point);
}
return 0;
}
void log_in(void* n)
{
struct node
{
char name_log[20];
int passlog;
int user_point;
} *p = n;
p->passlog = 1;
}
void logged_in(char* name, int point)
{
}
Если вы не хотитепередайте tmp
по формальной ссылке в log_in()
, вы должны сделать его доступным во всем мире.Например, как это:
void log_in(void);
void logged_in(char*, int);
void* pTmp;
int main(void)
{
int sel = '2';
if (sel == '2')
{
struct node
{
char name_log[20];
int passlog;
int user_point;
} tmp;
pTmp = &tmp;
log_in();
if (tmp.passlog)
logged_in(tmp.name_log, tmp.user_point);
}
return 0;
}
void log_in(void)
{
struct node
{
char name_log[20];
int passlog;
int user_point;
} *p = pTmp;
p->passlog = 1;
}
void logged_in(char* name, int point)
{
}