使用函数指针从B在B中设置和调用私有成员函数的语法是什么?

时间:2019-01-19 19:43:34

标签: c++ callback function-pointers

我正在尝试创建一个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的构造函数时遇到运行时错误。

0 个答案:

没有答案