"Candidate function not viable"来自 g++/gcc 编译器。这是怎么回事?
"Candidate function not viable" from g++/gcc compiler. What is wrong here?
我正试图编译我的main.cpp,但两个小时以来我一直收到这个错误。这里的问题是将函数作为参数传递,但我认为我做错了什么。编译器说找不到函数,但我已经在"functions.h"中包含了"newt_rhap(params)"。
我做了returnType(*functionName)(paramType),但我可能跳过了这里的一些内容。我朋友的代码不需要最近提到的语法。这里怎么了?
我试着同时使用-std=c++11和-std=c++98。gcc/g++编译器来自我的Xcode命令行工具。
g++ (or gcc) -std=c++98(or 11) main.cpp -o main.out
误差没有差别。
**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);
这是代码。
// 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;
}
然后函数.h和函数.cpp,分别为
// 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;
}
代替:
guess = newt_rhap(eq1(guess),d1(guess),guess);
尝试:
guess = newt_rhap(eq1, d1, guess);
该函数以两个函数和一个猜测作为自变量。通过传递eq1(guess)
,您传递的是一个double,而不是一个函数(参数为guess
的eq1
的求值结果)
functions.h
中函数原型的签名与functions.cpp
中实现的函数的签名不匹配。
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 绕道重铸瓷砖层是怎么回事
- 架 (U+67B6) 与en_US不符.UTF-8.这是怎么回事?
- R 中的算术在数字上比整数更快。这是怎么回事?
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 分配器密集和稀疏是怎么回事?
- 传递引用C++,指针的向量.这是怎么回事?
- __vector_base_common是怎么回事?
- (对象)不命名类型.怎么回事
- 变量已在 .obj 中定义;这是怎么回事?
- Sublime上的EasyClangComplete是怎么回事?
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 标准::地图使用.这是怎么回事?核心转储?我做得不正确?
- llvm libcxx的源代码是怎么回事?
- "enable_if"使编译器很难生成可读的错误消息,这是怎么回事
- "Candidate function not viable"来自 g++/gcc 编译器。这是怎么回事?