可能的重复:
禁用“错误的函数转换”警告
我试图让我的大脑围绕 C++ 函数指针。为了保持我的学习经验基础,我创建了一个测试函数指针示例。最终,我想通过引用传递所有就绪的实例化对象,以便我可以回调该对象的方法;然而,为了学习和理解,我想坚持 C++ 函数指针的基础知识。我仅使用 .cpp 文件创建了一个工作示例,但我没有成功的部分是在 .cpp 和 .h 中使用函数指针。使用 .cpp 和 .h 文件时,我没有正确执行哪些操作以使我的学习示例成功运行?
我创建了两个文件,exeCallback.h 和 exeCallback.cpp。
.h file
/*
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 );
}
该错误告诉您正在尝试将指向成员函数的指针分配给指向(非成员)函数的指针。有关差异的更多信息,请参阅[此处](错误告诉您正在尝试将指向成员函数的指针分配给指向(非成员)函数的指针。)。看来你需要声明foo
as
void (exeCallback::*foo)(int);
或者通过使用让您的生活更轻松std::function (or boost::function
如果您没有 C++11 支持)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)