我不明白我做错了什么。我试图将一个函数传递到构造函数中,将该函数设置为一个变量,然后在以后调用该变量。(像回调一样(
我得到的错误是";没有匹配的构造函数";既然void不是回调。。。但我认为回调只是一个返回void的方法?
头文件
class Cars {
typedef void *callback();
public:
Cars(callback* method);
private:
callback* method;
void trigger();
}
类文件
Cars::Cars(callback method){
this->method = method;
}
void Cars::trigger() {
method();
}
主文件
void doSomething() {
// does something
}
Cars car = Cars(doSomething());
这里有几个问题。
typedef void *callback();
这声明callback
是一个返回指向void
的指针的函数。
Cars(callback* method);
因此,构造函数获取一个指向函数的指针,该函数返回一个指向void的指针。您的明显意图是使用指向返回void
的函数的指针,而不是指向void
的指针。因此,typedef
应为:
typedef void callback();
然而,一些人发现最终结果有点令人费解。相反,使用它更清楚:
typedef void (*callback)();
Cars(callback method);
这是同样的事情,但稍微清晰一点。但这并不是唯一的问题。
void doSomething() {
// does something
}
这声明并定义了一个返回void
的函数。
Cars car = Cars(doSomething());
给定上面的定义,在C++中,表达式doSomething()
显然意味着对该函数的调用,它生成void
结果,然后将其传递给Cars
构造函数。当然,这不是你想要做的。相反,正确的语法是:
Cars car = Cars(doSomething);
或
Cars car = Cars(&doSomething);
不管你喜欢什么。单独声明的函数的名称计算为指向该函数的指针(无论是否带有显式&
(。