我正在使用头文件中的一个函数,该头文件是为我正在进行的练习预定义的。主要是我有;
defineClickListener(clickAction, graph);
clickAction是我所做的一个函数,在main上面有一个原型,graph是一个pathfindergraph类的实例。在包含的pathfindergraphics标题中,它表示;
/**
* Function: defineClickListener
* Usage: defineClickListener(clickFn);
* defineClickListener(clickFn, data);
* ------------------------------------------
* Designates a function that will be called whenever the user
* clicks the mouse in the graphics window. If a click listener
* has been specified by the program, the event loop will invoke
*
* clickFn(pt)
*
* or
*
* clickFn(pt, data)
*
* depending on whether the data parameter is supplied. In either
* case, pt is the GPoint at which the click occurred and data
* is a parameter of any type appropriate to the application. The
* data parameter is passed by reference, so that the click function
* can modify the program state.
*/
void defineClickListener(void (*actionFn)(const GPoint& pt));
template <typename ClientType>
void defineClickListener(void (*actionFn)(const GPoint& pt, ClientType & data), ClientType & data);
据我所知,我正确使用了defineClickListener,但是我收到的错误是“没有匹配函数来调用'defineClickListener'”。不确定我做错了什么 - 任何想法?
答案 0 :(得分:1)
这意味着您提供的参数无法与您尝试调用的模板函数的参数匹配。这可能有很多原因。编译器生成的错误消息通常包含其他信息。
我会半猜测你的clickAction
是一个非静态成员函数。
编辑:根据您提供的其他信息,您clickAction
被声明为
static void clickAction(PathfinderGraph *&graph)
这是完全不可接受的。首先,处理函数必须有两个参数,第一个是const GPoint&
static void clickAction(const GPoint& pt, PathfinderGraph *&graph)
其次,根据模板声明,处理函数的第二个参数的类型必须与defineClickListener
的最后一个参数的类型匹配,即两者必须是对相同类型的引用。您致电graph
时defineClickListener
的内容是什么?如果graph
是指向PathfinderGraph
的指针,那么您确实应该使用上述声明。
但如果graph
不是指针(对图形对象或图形对象本身的引用),那么它应该是
static void clickAction(const GPoint& pt, PathfinderGraph &graph)