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.
아,이 일 것으로 보인다입니다! (컴파일 오류 없음) 대단히 감사합니다. 그러나 나는 그 배후의 논리를 이해하고 있는지 확신 할 수 없다. 왜 여분의 별표인가? –
아, 잠깐, 알 겠어 ... 그래서 분명해. 건배. –
이것을 만들기 위해서 간단히'svs'의 선언을 취하고 매개 변수 이름을 제거하고'svs'를'(* intersect_alg)'로 대체했습니다. – caf