“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
Vous devez vous connecter pour publier un commentaire.
Au lieu de:
essayer:
La fonction prend deux fonctions et une supposition comme arguments. En passant
eq1(guess)
vous êtes de passage d'un lit double, pas une fonction (le résultat évaluée deeq1
avec un argument deguess
)OriginalL'auteur Sam Cristall
La signature de votre prototype de fonction dans
functions.h
ne correspond pas à la signature de la fonction, vous pouvez mettre en œuvre dansfunctions.cpp
.functions.h
.OriginalL'auteur Patrick Sanan