说明通过指针访问非静态类成员函数
Clarification with accessing non-static class member function via pointer
我很难从函数指针访问非静态成员函数,并且无法完全弄清楚我的语法问题。尝试如下图所示进行编译时,我收到"错误:fnc_ptr未在此范围内声明",如果代码被修改为无法访问该函数,它应该指向它编译并将打印出 1 用于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;
}
傅.cpp
#include <cmath>
#include "foo.h"
namespace pizza{
double foo::fnc_one(double x){
return pow(x,3) - x + 2;
}
}
福.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
我相信正确的语法是:
//std::cout << (bar.*fn_ptr)(1) << std::endl;
std::cout << (bar.*(bar.fn_ptr))(1) << std::endl;
相关文章:
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 是否通过单元化指针UB访问静态类成员
- 在子类中填充静态类成员
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 说明通过指针访问非静态类成员函数
- 静态类成员的使用
- 静态类成员不是与 this 指针没有关联吗?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何在 Visual Studio 中显示模板的静态类成员
- 即使没有析构函数,非静态类成员也会被销毁吗?
- 静态模板函数访问静态类成员
- 长镜头 -- 可能有一个静态类成员,该类成员具有访问非静态成员的 lambda
- C 静态类成员未在 *静态库 *中初始化
- 在OpenMP中制作静态类成员螺纹
- 正在初始化初始化函数中的静态类成员
- 不推荐使用C++11中的静态类成员
- 我们可以在构造函数中定义静态类成员吗?
- 为什么静态类成员没有内存泄漏错误?
- 架构X86_64静态类成员的错误符号X86_64错误