Llamada de función con código real

Lo que estoy tratando de hacer es tomar esta función llamada …

assign_sum_to_pixel(&current_pixel, sum); 

y reemplazarlo con el código real que llama que es este …

 /* * assign_ sum_ to_ pixel - Computes averaged pixel value in current_pixel */ static void assign_ sum_ to_ pixel (pixel *current_ pixel, pixel_ sum sum) { current_ pixel->red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num); return; } 

Lo que se me ocurrió fue esto …

 /* * mysmooth1 - my smooth1 */ char mysmooth1_descr[] = "my smooth1: My smooth1"; void mysmooth1(int dim, pixel *src, pixel *dst) { int i, j; int ii, jj; pixel_ sum sum; pixel current_ pixel; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { initialize_ pixel_ sum (&sum); for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) for(jj = max(j-1, 0); jj red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num);*** ***(These three lines above are the lines I inserted which is where the function call use to be)*** dst[RIDX(i, j, dim)] = return; } } } 

pero … por alguna razón, cuando ejecuto el código no funciona, me da este error

 kernels.c:456: error: invalid type argument of â->â kernels.c:457: error: invalid type argument of â->â kernels.c:458: error: invalid type argument of â->â kernels.c:459: warning: statement with no effect 

que es justo donde agregué el nuevo código …

 current_ pixel->red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num); 

alguien puede decirme si estoy haciendo algo mal … ¿Me faltan corchetes en algún lugar? ¿No estoy inicializando mis variables correctamente? se supone que el retorno no se encuentra en la parte inferior igual a dst[RIDX(i, j, dim)] cualquier ayuda, comentarios y sugerencias serían muy apreciados. Gracias.

Su current_pixel es un pixel , mientras que anteriormente pasó &current_pixel , un pixel * (puntero a píxel). Por lo tanto, ahora necesita usar current_pixel.red (con un punto), no current_pixel->red (con una “flecha que señala hacia la derecha”), que necesita un puntero en el lado izquierdo de la flecha; Etcétera.

No en línea con la mano. Use la palabra clave en línea o mejor, deje que el comstackdor decida.

Si debe forzar el ingreso, sería mejor utilizar una macro.

 #define ASSIGN_SUM_TO_PIXEL (current_pixel, sum)\ do {\ current_pixel.red = (unsigned short) (sum.red/sum.num);\ current_pixel.green = (unsigned short) (sum.green/sum.num);\ current_pixel.blue = (unsigned short) (sum.blue/sum.num);\ } while(0) 

entonces utilízalo como

 for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { initialize_pixel_sum (&sum); for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++) accumulate_sum(&sum, src[RIDX(ii, jj, dim)]); { ASSIGN_SUM_TO_PIXEL (current_pixel, sum); ... 

Al menos de esa manera el código se mantiene separado en la fuente.