过去一小时我一直在寻找这个问题的答案,但找不到有效的解决方案.我正在尝试使用函数指针来调用特定对象的非静态成员函数.我的代码编译得很好,但在运行时我遇到了一个讨厌的运行时异常,它说:
运行时检查失败#0 - ESP的值未在函数调用中正确保存.这通常是调用使用一个调用约定声明的函数和使用不同调用约定声明的函数指针的结果.
很多网站都说在方法头中指定了调用约定,所以我__cdecl之前添加了它.但是,我的代码在更改后遇到了相同的运行时异常(我也尝试过使用其他调用约定).我不知道为什么我必须首先指定cdecl,因为我的项目设置被设置为cdecl.我正在使用一些外部库,但在添加此函数指针之前,这些工作正常.
我正在关注此:https://stackoverflow.com/a/151449
我的代码:
啊
#pragma once
class B;
typedef void (B::*ReceiverFunction)();
class A
{
public:
A();
~A();
void addEventListener(ReceiverFunction receiverFunction);
};
Run Code Online (Sandbox Code Playgroud)
A.cpp
#include "A.h"
A::A(){}
A::~A(){}
void A::addEventListener(ReceiverFunction receiverFunction)
{
//Do nothing
}
Run Code Online (Sandbox Code Playgroud)
BH
#pragma once
#include <iostream>
#include "A.h"
class B
{
public:
B();
~B();
void testFunction();
void setA(A* a);
void addEvent();
private:
A* a;
};
Run Code Online (Sandbox Code Playgroud)
B.cpp
#include "B.h"
B::B(){}
B::~B(){}
void B::setA(A* a)
{
this->a = a;
}
void …Run Code Online (Sandbox Code Playgroud) c++ member-function-pointers function-pointers visual-studio-2010