gpt4 book ai didi

C++ 错误 : no matching function for call

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:51 25 4
gpt4 key购买 nike

我正在尝试使用二等分法求解二次方程。尝试评估根时出现此错误:“没有匹配的调用函数”。

#include "assign4.h"
#include <iostream>

using namespace std;

int main(int argc, char * argv[]){
solution s;
double root;

cout << "Enter interval endpoints: ";
cin >> s.xLeft >> s.xRight;

cout << "Enter tolerance: ";
cin >> s.epsilon;

root = s.bisect (s.xLeft, s.xRight, s.epsilon, s.f, s.error);

if (!(s.error))
cout << "Root found at " << root << "\nValue of f(x) at root is: " << s.f(root);
else
cout << "The solution of a quadratic equation with coefficients: " << endl;
cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
cout << "has not been found." << endl;

return 0;
}

错误发生在 root = ... 似乎是我的函数 f 有问题,但我不明白哪里出了问题。下面两段代码是我的类和类实现文件。我们刚刚开始使用类,所以我不确定我的问题是出在上面的代码中还是出在上面的代码中。

#ifndef ASSIGN4_H
#define ASSIGN4_H

class solution {

public:
double xLeft, xRight;
double epsilon;
bool error;

double bisect(double, double, double, double f(double), bool&);
double f(double);
};
#endif // ASSIGN4_H

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "assign4.h"
#include <iostream>
#include <cmath>

using namespace std;

double solution::bisect (double xLeft, double xRight, double epsilon, double func(double), bool& error) {
double xMid;
double fLeft, fRight;
double fMid;

fLeft = f(xLeft);
fRight = f(xRight);

error = (fLeft * fRight) > 0;
if (error)
return -999.0;

while (fabs (xLeft - xRight) > epsilon) {
xMid = (xLeft + xRight) / 2.0;
fMid = f (xMid);

if (fMid == 0.0)
return xMid;
else if (fLeft * fMid < 0.0)
xRight = xMid;
else
xLeft = xMid;

cout << "New Interval is [" << xLeft << ", " << xRight << "]" << endl;
}

return (xLeft + xRight) / 2.0;
}

double solution::f (double x) {
return ((5 * pow(x,2.0)) + (5 * x) + 3);
}

最佳答案

第4个参数是一个函数指针,

double bisect(double, double, double, double f(double), bool&);

当你调用这个函数时:

root = s.bisect (s.xLeft, s.xRight, s.epsilon, s.f, s.error);

虽然成员小说 double f(double) 与该参数不是同一类型,因为 this 是 C++ 成员函数而不是静态的,因此在编译时将 'this' 参数添加到该成员函数中.

键入将静态关键字添加到函数中。

关于C++ 错误 : no matching function for call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com