我正在尝试创建一个Foo可以调用Bar的回调函数。我遇到“运行时检查失败#0”。我已经对此进行了一些研究,但并没有为我点击,因此,我要发布此问题。
我首先遇到这个问题,试图在UE4中为我的爱好项目建立触发游戏系统,我只是简化了代码以将其发布到这里。
Foo类:
#pragma once
class Bar;
class Foo
{
public:
Foo(Bar* bar);
~Foo(){}
private:
void TestCB();
};
cpp:
#include "Foo.h"
#include <iostream>
#include "Bar.h"
Foo::Foo(Bar* bar)
{
bar->SetUpCallback(this, &Foo::TestCB);
}
void Foo::TestCB()
{
std::cout << "It Actually Works!";
}
酒吧课:
#pragma once
class Foo;
class Bar
{
public:
typedef void (Foo::*VoidFuncPtrNoParams)(void);
Bar() {}
~Bar() {}
void SetUpCallback(Foo* owner, VoidFuncPtrNoParams callback);
void CallCB();
private:
Foo* CBOwner;
VoidFuncPtrNoParams CBToCall;
};
cpp:
#include "Bar.h"
#include "Foo.h"
void Bar::SetUpCallback(Foo* owner, VoidFuncPtrNoParams callback)
{
CBOwner = owner;
CBToCall = callback;
}
void Bar::CallCB()
{
(CBOwner->* (CBToCall))();
}
主要:
#include "Foo.h"
#include "Bar.h"
int main()
{
Bar* bar = new Bar();
Foo* foo = new Foo(bar);
bar->CallCB();
delete bar;
bar = nullptr;
delete foo;
foo = nullptr;
return 0;
}
我显然期望它输出“ Itally实际上有效!”,但是,它在尝试退出Foo的构造函数时遇到运行时错误。