没有匹配的功能

时间:2013-06-16 17:02:44

标签: c++

我正在使用头文件中的一个函数,该头文件是为我正在进行的练习预定义的。主要是我有;

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'”。不确定我做错了什么 - 任何想法?

1 个答案:

答案 0 :(得分:1)

这意味着您提供的参数无法与您尝试调用的模板函数的参数匹配。这可能有很多原因。编译器生成的错误消息通常包含其他信息。

我会半猜测你的clickAction是一个非静态成员函数。

编辑:根据您提供的其他信息,您clickAction被声明为

static void clickAction(PathfinderGraph *&graph)

这是完全不可接受的。首先,处理函数必须有两个参数,第一个是const GPoint&

static void clickAction(const GPoint& pt, PathfinderGraph *&graph)

其次,根据模板声明,处理函数的第二个参数的类型必须与defineClickListener的最后一个参数的类型匹配,即两者必须是对相同类型的引用。您致电graphdefineClickListener的内容是什么?如果graph是指向PathfinderGraph的指针,那么您确实应该使用上述声明。

但如果graph不是指针(对图形对象或图形对象本身的引用),那么它应该是

static void clickAction(const GPoint& pt, PathfinderGraph &graph)