Я пытаюсь создать функцию обратного вызова, которую 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))();
}
main:
#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;
}
Я, очевидно, ожидаю, что он выдаст «Это на самом деле работает!», Однако, он сталкивается с ошибкой во время выполненияпытаясь выйти из конструктора Foo.