У меня есть один файл с абстрактным классом
struct Abstract {
virtual bool preflightCheck(void) = 0;
std::function<void(Abstract *)> didIssueError;
virtual ~Abstract() {}
}
Один файл с производным классом
class Derived : public Abstract {
bool preflightCheck(void) {
if(didIssueError != nullptr)
this->didIssueError(reinterpret_cast<MediaAssetAbstract*>(this));
}
}
А потом у меня есть файл, где я называю didIssueError
как лямбда
bool testDerived(Abstract & derived) {
derived.preflightCheck();
derived.didIssueError = [&derived](Abstract * derived) {
std::cout << "error" << std::endl;
};
return true;
}
int main() {
auto derived = Derived();
assert(testDerived(derived));
return 0;
}
Если я уберу проверку на nullptr
, программа вылетит с сообщением
terminate called after throwing an instance of 'std::bad_function_call' what(): bad_function_call
.
Где может быть проблема, пожалуйста? С недоступностью производного класса до didIssueError
?