CoSMiCaL
Power Member
Boa noite, estou a fazer um programa em C que mexe com filas e com threads (programação concorrente) mas está-me a dar o erro: "error: dereferencing pointer to incomplete type". O código é:
Esse erro é apontado duas vezes para a linha
e uma para a linha
O código da struct _sthread é:
Alguém me pode ajudar a detectar o que está mal nestas linhas e o que precisa de ser mudado?
Obrigado!
Código:
[COLOR=#808080][I]/* queue_element_t */[/I][/COLOR]
[COLOR=#993333]typedef[/COLOR] [COLOR=#993333]struct[/COLOR] queue_element [COLOR=#009900]{[/COLOR]
[COLOR=#993333]struct[/COLOR] _sthread [COLOR=#339933]*[/COLOR]thread[COLOR=#339933];[/COLOR]
[COLOR=#993333]struct[/COLOR] queue_element [COLOR=#339933]*[/COLOR]next[COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] queue_element_t[COLOR=#339933];[/COLOR]
[COLOR=#808080][I]/* queue_t */[/I][/COLOR]
[COLOR=#993333]typedef[/COLOR] [COLOR=#993333]struct[/COLOR] _queue [COLOR=#009900]{[/COLOR]
queue_element_t [COLOR=#339933]*[/COLOR]first[COLOR=#339933];[/COLOR]
queue_element_t [COLOR=#339933]*[/COLOR]last[COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] queue_t[COLOR=#339933];[/COLOR]
[COLOR=#993333]void[/COLOR] queue_print[COLOR=#009900]([/COLOR]queue_t [COLOR=#339933]*[/COLOR]queue[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
queue_element_t [COLOR=#339933]*[/COLOR]el [COLOR=#339933]=[/COLOR] queue[COLOR=#339933]->[/COLOR]first[COLOR=#339933];[/COLOR]
[COLOR=#993333]struct[/COLOR] _sthread [COLOR=#339933]*[/COLOR]thr[COLOR=#339933];[/COLOR]
[COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR]el [COLOR=#339933]==[/COLOR] NULL[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
[COLOR=#b1b100]return[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]
[COLOR=#b1b100]for[/COLOR][COLOR=#009900]([/COLOR]thr [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]thread[COLOR=#339933];[/COLOR] el [COLOR=#339933]!=[/COLOR] NULL[COLOR=#339933];[/COLOR] el [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]next[COLOR=#339933],[/COLOR] thr [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]thread[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
[URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#009900]([/COLOR][COLOR=#ff0000]" %d,%d"[/COLOR][COLOR=#339933],[/COLOR] thr[COLOR=#339933]->[/COLOR]tid[COLOR=#339933],[/COLOR] thr[COLOR=#339933]->[/COLOR]quantum[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]
[URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#009900]([/COLOR][COLOR=#ff0000]"[COLOR=#000099][B]\n[/B][/COLOR]"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]
[COLOR=#993333]struct[/COLOR] _sthread[COLOR=#339933]*[/COLOR] queue_find_tid[COLOR=#009900]([/COLOR]queue_t [COLOR=#339933]*[/COLOR]queue[COLOR=#339933],[/COLOR] [COLOR=#993333]int[/COLOR] tid[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
queue_element_t [COLOR=#339933]*[/COLOR]el[COLOR=#339933];[/COLOR]
[COLOR=#993333]struct[/COLOR] _sthread [COLOR=#339933]*[/COLOR]thr[COLOR=#339933];[/COLOR]
[COLOR=#b1b100]for[/COLOR][COLOR=#009900]([/COLOR]el [COLOR=#339933]=[/COLOR] queue[COLOR=#339933]->[/COLOR]first[COLOR=#339933],[/COLOR] thr [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]thread[COLOR=#339933];[/COLOR] el [COLOR=#339933]!=[/COLOR] NULL[COLOR=#339933];[/COLOR] el [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]next[COLOR=#339933],[/COLOR] thr [COLOR=#339933]=[/COLOR] el[COLOR=#339933]->[/COLOR]thread[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
[COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR]thr[COLOR=#339933]->[/COLOR]tid [COLOR=#339933]==[/COLOR] tid[COLOR=#009900])[/COLOR]
[COLOR=#b1b100]return[/COLOR] el[COLOR=#339933]->[/COLOR]thread[COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]
[COLOR=#b1b100]return[/COLOR] NULL[COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]
Esse erro é apontado duas vezes para a linha
Código:
printf(" %d,%d", thr->tid, thr->quantum);
e uma para a linha
Código:
if(thr->tid == tid)
O código da struct _sthread é:
Código:
[COLOR=#993333]struct[/COLOR] _sthread [COLOR=#009900]{[/COLOR]
sthread_ctx_t [COLOR=#339933]*[/COLOR]saved_ctx[COLOR=#339933];[/COLOR]
sthread_start_func_t start_routine_ptr[COLOR=#339933];[/COLOR]
[COLOR=#993333]long[/COLOR] wake_time[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] join_tid[COLOR=#339933];[/COLOR]
[COLOR=#993333]void[/COLOR][COLOR=#339933]*[/COLOR] join_ret[COLOR=#339933];[/COLOR]
[COLOR=#993333]void[/COLOR][COLOR=#339933]*[/COLOR] args[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] tid[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] nice[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] priority[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] quantum[COLOR=#339933];[/COLOR]
[COLOR=#993333]int[/COLOR] rem_quantum[COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][COLOR=#339933];[/COLOR]
Alguém me pode ajudar a detectar o que está mal nestas linhas e o que precisa de ser mudado?
Obrigado!