我基本上有一个类在其构造函数中接受一个函数指针,然后将它存储在一个变量中,以便在类上调用函数时使用,如下所示:
class foo{
public:
foo( void(*a)() = 0 ): func(a){}
void call(){ if(func) func(); }
private:
void(*func)(); };
当我使用已在包含的标头中向前声明的函数创建实例时,会出现问题。通过调试我发现指针func有时为null,而传递的函数是有效的,导致它不被执行。
我在MinGW上使用CodeBlock。
所以这样:
function.h
void test();
function.cpp
#include "function.h"
void test(){
std::cout << "Hello World" << std::endl;}
的main.cpp
#include "function.h"
int main(){
foo a(test);
a.call();
return 0;}
还有一件事:它并不总是错误地发生,所以我认为它与优化或类似的事情有关。
我遗漏的一些东西,因为它们不重要的是foo实例是用new创建的,添加到std :: vector并在call()函数的末尾删除它自己。析构函数确保它也从std :: vector中删除。这一切都发生在另一个包含function.h的cpp文件中
解决
答案 0 :(得分:1)
通过类的外观,似乎你永远不想用空函数指针构造“foo”。如果函数指针为null,您是否考虑在构造函数中抛出异常?这样做可以帮助您确定代码中使用空指针构造“foo”的位置。