【发布时间】:2012-09-18 17:09:56
【问题描述】:
我有一个通用函数,用于对 List 类中的一些对象进行排序。
这个函数工作得很好,但是当我想使用指向该类中成员函数的函数指针将该函数应用到一个类时,它不会构建。
函数是:
template <typename T1, typename T2, typename T3>
void DialogFaitListing::trie(T1 * list, T2 (T1::*fx)(quint16), T3 (T2::*crit)())
{
for(int i(0);i<list->count();i++)
{
for(int j(i);j<list->count();j++)
{
if((((list->*fx)(i)).*crit)() > (((list->*fx)(j)).*crit)())
{
list->swap(i,j);
}
}
}
}
其中list是包含对象列表的类,fx是访问对象的函数指针,crit是用于排序的对象比较函数。
当我使用这条线构建时:
trie(vend,&Vendeurs::getVend,&Vendeur::getNom);
我收到此错误:
dialogfaitlisting.cpp:459: erreur : no matching function for call to
'DialogFaitListing::trie(Vendeurs*&, Vendeur (Vendeurs::*)(quint16),
QString (Personne::*)())'
ps:对不起我的英语不好
【问题讨论】:
-
你是three star programmer吗?让事情变得更简单!
-
你需要提供一个更简单更完整的例子。例如,如果不查看您如何声明模板类,就不可能知道这里可能出现的所有错误。另外,trie 的实现在这里并不重要;它只会增加问题的噪音。尝试将您的代码减少到仍然产生错误的最小示例并发布整个结果(可能在单个 .cpp 文件中大约 10 行)。
标签: c++ qt templates inheritance