c++ - 通过指针访问非静态类成员函数的说明

标签 c++ non-static

我在从函数指针访问非静态成员函数时遇到困难,无法完全弄清楚我的语法问题。当尝试如下所示进行编译时,我收到“错误: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;
        }
   };
}

可以找到一个非常相似的问题here , 附加引用 here .

最佳答案

在引用作为该对象属性的 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/

相关文章:

c# - 将 HBITMAP 句柄从非托管代码传递到托管代码以创建 System.Drawing.Bitmap 的安全性

java - 非静态方法引用?

java - 在 Java 的静态方法中调用非静态方法

java: 非静态变量,不能从静态上下文中引用

c++ - 如何在C++中增加指针的指针值

c++ - 从方法内部调用自析构函数

c++ - 有没有办法根据绘制的内容设置QImage分辨率?

c++ - 基于 std::vector<char> 创建 std::stringbuf

Java GUI - 如何从静态方法将文本附加到 JTextArea?

Android Studio 静态或非静态变量和方法