Visual Studio 2015不会让我初始化一个函数指针

时间:2018-05-23 01:24:56

标签: c++ function-pointers

我试图创建一个函数指针。我的代码:

标题文件:

#pragma once
#include <stdio.h>

class my_class
{
private:
    int function(int x);
    int *(*foo)(int);

public:
    my_class();
    ~my_class();
};

css文件:

#include "my_class.h"

int my_class::function(int x) {
    return 1;
}

my_class::my_class() {
    foo = &function;
}

my_class::~my_class()
{
}

但是my_class :: my_class()中的行给出了这个错误:

error C2276: '&': illegal operation on bound member function expression

将鼠标光标放在所述行中的=上会显示以下工具提示:

a value of type "int (my_class::*)(int x)" cannot be assigned to an entity of type "int *(*)int"

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:-1)

您认为编译器将为您做的是从指向成员函数的指针到指向普通函数的指针的隐式类型转换。但事实并非如此。

通常不使用指向成员函数的指针,因为对象的实例是分配了一定量的内存,因此指向成员函数的指针可能不会精确指向该函数并可能导致错误的结果

您可以通过两种方式解决问题:

  1. 将您的成员函数定义为静态函数。静态成员函数不会附加到任何特定对象,并且可以在没有作用域解析运算符的情况下使用。
  2. 您可以使用的另一个可能的解决方法是使用this指针创建指向成员函数的指针。