2013-09-13 2 views
-1
#include <stdio.h> 

double soma (double a, double b){ 
    return a+b; 
} 

double mult (double a, double b){ 
    return a*b; 
} 

double sub(double a, double b){ 
    return a-b; 
} 

double div (double a, double b){ 
    return a/b; 
} 

double fib_ninja (double (* fn)(double a, double b),int init){ 
    int i=0; 
    int tam=10; 
    int acum = init; 
    int ant=0; 

    for (i=0 ; i<tam ; i++){ 
     acum = fn(acum,ant); 
     ant = acum; 
     printf ("%f",acum); 
    } 
    return acum; 
} 

int main(){ 
    int op; 
    printf("escolha a operação desejada: 1(soma),2(multiplicação),3(subtraçaõ,4(divisão)) "); 
    scanf("%d",&op);   
    if(op==1){ 
     fib_ninja((soma (6.0, 2.0)),0); 
    } 
    if(op==2){ 
     fib_ninja((mult ,6.0, 2.0),1); 
    } 
    if(op==3) { 
     fib_ninja((sub ,6.0, 2.0),0); 
    } 
    if(op==4){ 
     fib_ninja((div ,6.0, 2.0),1); 
    } 

    return 0; 
} 

Ошибка говоритошибки передачи аргумента функции другой функции

In function 'main': 
Line 39: error: incompatible type for argument 1 of 'fib_ninja' 
Line 42: error: incompatible type for argument 1 of 'fib_ninja' 
Line 45: error: incompatible type for argument 1 of 'fib_ninja' 
Line 48: error: incompatible type for argument 1 of 'fib_ninja' 

ссылка из этого http://codepad.org/HTLeR6Jh

+2

Я всегда чувствую, что меня троллируют, когда я читаю заголовок с орфографической ошибкой. – progrenhard

+2

Всегда указывайте язык, который вы используете, и используйте более описательное название. – geoffspear

+0

Извините, у меня нет хорошего английского, я из Бразилии. ;/ Образование здесь дрянное. – user2777265

ответ

3

Я пытаюсь сделать вывод, что вы пытаетесь сделать здесь, так что дайте мне знать, если я ошибаюсь.

Первый: acum и ant в fib_ninja() должен быть double.

Во-вторых: Я не могу сказать, что вы пытаетесь сделать со значениями 6.0 и 2.0. Они не объявлены в подписи или не используются в любом месте fib_ninja(), и нет никакого смысла передавать их вашим soma() и др. функции, так как fib_ninja(), очевидно, должен принимать указатель на функцию, а не double, возвращенный из выполнения этих функций. Удалите аргументы 6.0 и 2.0 (и лишние скобки) от вызовов до fib_ninja, и это избавит вас от ошибок.

т.д .:
fib_ninja(soma, 0);
fib_ninja(mult, 1);

После фиксации этих вещей, ваш код все равно не будет делать. Если у вас возникнут дополнительные проблемы, когда вы больше работаете над этим, задайте другой вопрос.

0

Программа немного сбита с толку и, вероятно, не принесет ничего полезного без каких-либо изменений. Я предлагаю опубликовать вопрос, на который вы пытаетесь ответить.

Несмотря на это, непосредственная проблема с компилятором довольно проста.

double Add(double x, double y); 

int main() 
{ 
    // The following will execute Add() and 
    // pass the result to func1() as a double. 
    func1(Add(1.0, 2.0)); 

    // The following will pass a function pointer 
    // for Add() to func2() 
    func2(Add); 

    return 0; 
} 

Я думаю, что вы хотите что-то вроде func2() выше, но вы написали что-то больше похоже на func1().

Смежные вопросы