我很抱歉这么多问,但是我遇到了另一个问题我不知道如何解决...从我收集的内容来看, gcc 无法解决 myComparator < / strong>类类型,可能是因为以下代码不符合标准。问题是我是否遗漏了某些内容或是否有解决此问题的方法,这不需要太多更改(如接口解决方案)......
template <typename DATA> class myArray
{
template <typename F> void sort (F &comp)
{
// No problems here
}
template <typename T> void sort(void)
{
T::myComparator cmp; //Error: expected `;' before 'zzz'
// T::template myComparator cmp; also doesn't work
sort(cmp);
}
};
class test
{
public:
class myComparator
{
public:
bool operator() ( const test *t1, const test * t2)
{
// No problems here
}
};
};
void testCmp()
{
myComparator cmp;
cmp.sort<test>();
}
答案 0 :(得分:1)
您必须使用typename
作为:
typename T::myComparator cmp;
//^^^^^^^
typename
是必需的,因为myComparator
是一个从属名称。
请参阅stackoverflow本身的C ++ FAQ:
"Where and why do I have to put template
and typename
on dependent names?"