看起來編譯器非常接近我想做的事情(因爲它調用了我的函數作爲候選者),但我不知道我做錯了什麼。爲什麼我的函數調用不匹配這個通用函數實現?
#include <stdio.h>
#include <stdlib.h>
#include <list>
using namespace std;
template <class U, template<class U> class T>
void AppendSorted(T<U>& l, U val)
{
typename T<U>::reverse_iterator rt = l.rbegin();
while(((*rt) > val) && (rt != l.rend()))
rt++;
l.insert(rt.base(), val);
}
int main(int argc, char* argv[])
{
list<int> foo;
AppendSorted<int, list<int> >(foo, 5);
list<int>::iterator i;
for(i = foo.begin(); i != foo.end(); i++)
{
printf("%d\n",*i);
}
return 0;
}
我得到的錯誤是:
test.cpp: In function ‘int main(int, char**)’:
test.cpp:21:43: error: no matching function for call to ‘AppendSorted(std::list<int>&, int)’
test.cpp:21:43: note: candidate is:
test.cpp:8:6: note: template<class U, template<class U> class T> void AppendSorted(T<U>&, U)
你會abbend在初始插件在你AppendSorted,順便說一句,因爲你而()子句中的eval命令是要提領迭代指着rend()當列表爲空時。在while()條件中反轉表達式以避免這種情況。 – WhozCraig
@WhozCraig:好點。 –