“类型为”void(exeCallback :: *)(int)“的值不能分配给”void(*)(int)“类型的实体

时间:2012-11-21 06:29:17

标签: c++ function-pointers

  

可能重复:
  Disabling “bad function cast” warning

我试图将我的大脑包裹在c ++函数指针中。为了保持我的学习体验基础,我创建了一个测试函数指针示例。最后,我想通过引用传递所有准备好的实例化对象,这样我就可以回调对象的方法;但是,为了学习和理解,我想坚持c ++函数指针的基础知识。我使用.cpp文件创建了一个工作示例,但我没有成功的部分是使用.cpp和.h中的函数指针。在使用.cpp和.h文件时,我没有正确地使我的学习示例成功运行?

我创建了两个文件,exeCallback.h和exeCallback.cpp。

.h文件

/*
File: exeCallback.h

Header file for exeCommand Library.
*/

#ifndef EXECALLBACK_H
#define EXECALLBACK_H

#include "mbed.h"

#include <map>

class exeCallback
{
public:
    exeCallback();

    void my_int_func(int x);

    void (*foo)(int);
private:
};

#endif

.cpp文件:

/*
File: exeCallback.cpp

Execute functions in other Sensor libraries/classes

Constructor
*/

#include "mbed.h"
#include "ConfigFile.h"
#include "msExtensions.h"
#include "cfExtensions.h"
#include "exeCallback.h"

exeCallback::exeCallback()
{

    foo = &exeCallback::my_int_func;

    /* call my_int_func (note that you do not need to write (*foo)(2) ) */
    foo( 2 );

}

void exeCallback::my_int_func(int x)
{
    printf( "%d\n", x );
}

1 个答案:

答案 0 :(得分:2)

错误告诉您正在尝试将指向成员函数的指针指定给指向(非成员)函数的指针。请参阅[此处](错误告诉您正在尝试将指向成员函数的指针指定给指向(非成员)函数的指针。)有关差异的更多信息。看起来您需要将foo声明为

void (exeCallback::*foo)(int);

或者使用std::function(或boost::function,如果您没有C ++ 11支持),让您的生活更轻松。