我在从函数指针访问非静态成员函数时遇到困难,无法完全弄清楚我的语法问题。当尝试如下所示进行编译时,我收到“错误:fnc_ptr 未在此范围内声明。”当代码被修改为不访问函数时,它应该指向它编译并将打印出 1 for bar.fn_ptr 。为了编译我使用了:
g++ -std=c++11 -Wall example.cpp foo.cpp
拆分文件结构/命名空间只是为了模拟与我的原始问题相同的条件。
例子.cpp
#include "foo.h"
#include <iostream>
int main(int argc, char* argv[]){
pizza::foo bar;
bar.fn_ptr = &pizza::foo::fnc_one;
std::cout << (bar.*fn_ptr)(1) << std::endl;
return 0;
}
foo.cpp
#include <cmath>
#include "foo.h"
namespace pizza{
double foo::fnc_one(double x){
return pow(x,3) - x + 2;
}
}
foo.h
namespace pizza{
class foo{
public:
double (foo::*fn_ptr)(double);
double fnc_one(double);
foo(){
fn_ptr = 0;
}
};
}
最佳答案
在引用作为该对象属性的 fn_ptr
时,您缺少 bar.
。将其更改为:
std::cout << (bar.*(bar.fn_ptr))(1) << std::endl;
而且有效。
我还建议阅读有关该主题的常见问题解答:https://isocpp.org/wiki/faq/pointers-to-members
关于c++ - 通过指针访问非静态类成员函数的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50206751/