-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からのリンク

4

2 に答える 2

3

私はあなたがここで何をしようとしているのかを推測しようとしているので、誤解があれば教えてください.

最初:acumそして必要antに応じて。fib_ninja()double

6.02 番目: と の値を使用して何をしようとしているのかわかりません2.0。それらは署名で宣言されていないか、 のどこでも使用されていませfib_ninja()soma()。これらの関数の実行からの戻りfib_ninja()値ではなく、明らかに関数ポインターを取ることを意図しているためです。and の呼び出しからdouble引数6.0and (および余分な括弧) を削除すると、エラーが解消されます。2.0fib_ninja

例えば:
fib_ninja(soma, 0);
fib_ninja(mult, 1);

これらを修正した後でも、コードはあまり機能しません。さらに問題が発生した場合は、別の質問を投稿してください。

于 2013-09-13T17:00:31.310 に答える
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()

于 2013-09-13T18:40:28.307 に答える