2010-05-19 7 views
6

함수 포인터를 인자로 취하는 함수 포인터를 만들려고 시도하고 있지만 어떻게해야할지 모르겠습니다 ... 내 함수 포인터 중 하나를 typedef하지만 동일한 오류가 발생합니다. 누군가가 올바른 구문으로 나를 도울 수 있습니까?함수 포인터를 인수로 취하는 함수 포인터를 만듭니다.

int 
186 main(int argc, char **argv) 
187 { 
188 int    i; 

194 typedef int (*search_alg) (int *, int, int); 
195 typedef int (*search) (search_alg); 
196 set_t   (*intersect_alg) (list_t *, (search)); 
197 
198 clo_t   *iopts = parse_args(argc, argv); 
199 
200 /* select interstion algorithm */ 
201 switch (iopts->imode) { 
202 case SVS: 
203  fprintf(stdout, "ALGORITHM : SvS\n"); 
204  intersect_alg = svs; 
205  break; 
206 case SEQ: 
207  fprintf(stdout, "ALGORITHM : Sequential\n"); 
208  intersect_alg = sequential; 
209  break; 
210 case ADP: 
211  fprintf(stdout, "ALGORITHM : Adaptive\n"); 
212  intersect_alg = adaptive; 
213  break; 
214 default: 
215  fprintf(stdout, "ALGORITHM : Unknown\n"); 
216  return (EXIT_FAILURE); 
217 } 
218 
219 /* select fsearch algorithm */ 
220 switch (iopts->mode) { 
221 case LIN: 
222  fprintf(stdout, "F-SEARCH : Linear\n"); 
223  search = linear_fsearch; 
224  break; 
225 case BIN: 
226  fprintf(stdout, "F-SEARCH : Binary\n"); 
227  search = binary_fsearch; 
228  break; 
229 case INP: 
230  fprintf(stdout, "F-SEARCH : Interpolation\n"); 
231  search = interpolation_fsearch; 
232  break; 
233 case EXP: 
234  fprintf(stdout, "F-SEARCH : Exponential\n"); 
235  search = exponential_fsearch; 
236  break; 
237 default: 
238  fprintf(stdout, "F-SEARCH : Unknown\n"); 
239  return (EXIT_FAILURE); 
240 } 
241 

244 
245 /* perform intersection and run timings */ 
246 for (i = 0; i < iopts->runs; i++) { 
248  /* perform intersect search */ 
249  intersect_alg (iopts->data_files, search); 
252 } 

내가 작품을 만들기 위해 노력하고있어 라인은 내가 원래

int (*search_alg) (int *, int, int); 
set_t (*intersect_alg) (list_t *, (*) (int *, int, int); 

을 시도, 249이며, 아마 가능하면 그런 식으로 작업을 수행하는 것을 선호합니다. 내가 갖는 오류 :

main.c:204: warning: assignment from incompatible pointer type 
main.c:208: warning: assignment from incompatible pointer type 
main.c:212: warning: assignment from incompatible pointer type 

그리고 내가 가리키는있어 기능은 다음과 같습니다

 22 /** Finger Search Operations for array sets **/ 
23 int    linear_fsearch(int *set, int len, int key); 
24 int    binary_fsearch(int *set, int len, int key); 
25 int    interpolation_fsearch(int *set, int len, int key); 
26 int    exponential_fsearch(int *set, int len, int key); 
27 
28 /** Intersect Algorithms **/ 
29 set_t   *svs(list_t * list, int (*srch_alg) (int *, int, int)); 
30 set_t   *sequential(list_t * list, int (*srch_alg) (int *, int, int )); 
31 set_t   *adaptive(list_t * list, int (*srch_alg) (int *, int, int)); 

사람이 내가 잘못 뭘하는지 볼 수 있을까요? 나는 그것을 이해할 수 없다. 감사합니다.

Rhys.

답변

9

당신이 intersect_alg에 필요한 선언은

set_t *(*intersect_alg)(list_t *, int (*)(int *, int, int)); 
+0

아,이 일 것으로 보인다입니다! (컴파일 오류 없음) 대단히 감사합니다. 그러나 나는 그 배후의 논리를 이해하고 있는지 확신 할 수 없다. 왜 여분의 별표인가? –

+0

아, 잠깐, 알 겠어 ... 그래서 분명해. 건배. –

+0

이것을 만들기 위해서 간단히'svs'의 선언을 취하고 매개 변수 이름을 제거하고'svs'를'(* intersect_alg)'로 대체했습니다. – caf

관련 문제