“Candidat à la fonction n'est pas viable”, à partir de g++/compilateur gcc. Quel est le problème ici?

J'essaie de compiler mon main.cpp mais je reçois cette erreur pour deux heures maintenant. La question ici est de passer une fonction en paramètre, mais je pense que je suis en train de faire quelque chose de mal. Le compilateur dit qu'il ne trouve pas la fonction, mais j'ai inclus "newt_rhap(params)" dans la partie "fonctions.h" déjà.

J'ai fait la returnType (*nomfonction)(paramType), mais j'ai peut-être omis quelque chose ici. Le code de mes amis n'a pas besoin de le mentionné récemment par la syntaxe. Quel est le problème ici?

J'ai essayé d'utiliser les deux -std=c++11 et -std=c++98. La gcc/g++ compilateur est venu de mon Xcode outils de ligne de commande.

g++ (or gcc) -std=c++98(or 11) main.cpp -o main.out

Il n'y avait pas de différence dans l'erreur.

**error: no matching function for call to 'newt_rhap'**

./functions.h:5:8: note: candidate function not viable: no known conversion from 'double' to
      'double (*)(double)' for 1st argument

double newt_rhap(double deriv(double), double eq(double), double guess);

Voici le code.

//main.cpp
#include <cmath>
#include <cstdlib>
#include <iostream>
#include "functions.h"

using namespace std;


//function declarations
//=============
//void test(double d);
//=============

int main(int argc, char const *argv[])
{
    //
    //stuff here excluded for brevity
    //

    //=============
    do
    {
        //line with error
        guess = newt_rhap(eq1(guess),d1(guess),guess);

        //more brevity

    } while(nSig <= min_nSig);
    //=============

    cout << "Root found: " << guess << endl;

    return 0;
}

Ensuite des fonctions.h et functions.cpp respectivement

//functions.h
#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED

//===========
double newt_rhap(double deriv(double), double eq(double), double guess);
//===========


//===========
double eq1(double x);
double d1(double x);
//===========


#endif

//functions.cpp
#include <cmath>
#include "functions.h"

using namespace std;

//===========
double newt_rhap(double (*eq)(double ) , double (*deriv)(double ), double guess)
{
    return guess - (eq(guess)/deriv(guess));
}
//===========

//===========
double eq1(double x)
{
    return exp(-x) - x;
}

double d1(double x)
{
    return -exp(-x) - 1;
}

OriginalL'auteur Nogurenn | 2013-12-03