main() 中从派生类C++调用函数时出错
Error in main() for function call from a derived class C++
//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));
无效,因为您将使用非静态成员函数作为参数f
和df
,而相应的参数声明为非成员函数。
无需定义函数的这两个参数,因为您可以简单地在 NewtonRaphson 的主体中调用这些成员函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用