main() 中从派生类C++调用函数时出错

Error in main() for function call from a derived class C++

本文关键字:调用 C++ 函数 出错 派生 main      更新时间:2023-10-16
//Newton-Raphson Method:
#include <iostream>
#include <cmath>
using namespace std;
class ClassNewton {
    public: 
    double NewtonRaphson(double x0, double epsilon, double f(double), double df(double));
    virtual double f(double) = 0; 
    virtual double df(double) = 0;  
};
double ClassNewton::NewtonRaphson(double x0, double epsilon, double f(double), double df(double)){
        double xold = x0;
        double diff;
        double xnew;
    do {
        xnew = xold - (f(xold)/df(xold));
        xold = xnew;
        } while (abs(diff) > epsilon); 
        return xnew;
}               
class derivedClass:public ClassNewton{
    public:
    double f(double x){ 
    double function = (x * x) + (2 * x) + 2;
    return function;
    }
    double df(double x){
    double derivative = (2 * x) + 2;
    return derivative;
    }
};
int main() {
    derivedClass n;
    double root;
    double x0 = 1.0;
    double epsilon = 0.00001;
    root = n.NewtonRaphson(x0, epsilon, f(root), df(root));
    cout << "The root of the function is  " << root << endl;
    return 0;
}

我使用空的 main 检查了 main 函数的代码,它可以编译而没有错误。但是,当我集成主文件时,出现以下错误:

NewtonRaphson.cc: In function ‘int main()’:
NewtonRaphson.cc:52:44: error: ‘f’ was not declared in this scope
NewtonRaphson.cc:52:54: error: ‘df’ was not declared in this scope
NewtonRaphson.cc:53:47: error: expected ‘;’ before ‘)’ token

我将不胜感激一些解释,我怀疑我以错误的方式使用虚拟功能。

首先在这个声明中

cout << "The root of the function is  ", root);
                                       ^^^^ ^^^

存在无效的表达式。

至于其他错误,则必须使用对象名称来调用类的非静态成员函数。

例如

n.f(root)

n.df(root)

考虑到本声明

double NewtonRaphson(double x0, double epsilon, double f(double), double df(double));

无效,因为您将使用非静态成员函数作为参数fdf,而相应的参数声明为非成员函数。

无需定义函数的这两个参数,因为您可以简单地在 NewtonRaphson 的主体中调用这些成员函数。