C++ 自定义比较器和模板的特定问题

C++ 自定义比较器和模板的特定问题,c++,templates,visual-c++,gcc,comparator,C++,Templates,Visual C++,Gcc,Comparator,我很抱歉问了这么多,但我遇到了另一个我不知道如何解决的问题。。。从我收集的信息来看,gcc无法解析myComparator类类型,可能是因为以下代码不符合标准。问题是,如果我遗漏了什么,或者这个问题是否有解决方法,不需要太多的更改(如接口解决方案) 模板类myArray { 模板无效排序(F&comp) { //这里没问题 } 模板作废排序(作废) { T::myComparator cmp;//错误:应在“zzz”之前出现“;” //模板myComparator cmp;也不起作用 排序(cm

我很抱歉问了这么多,但我遇到了另一个我不知道如何解决的问题。。。从我收集的信息来看,gcc无法解析myComparator类类型,可能是因为以下代码不符合标准。问题是,如果我遗漏了什么,或者这个问题是否有解决方法,不需要太多的更改(如接口解决方案)

模板类myArray
{
模板无效排序(F&comp)
{
//这里没问题
}
模板作废排序(作废)
{
T::myComparator cmp;//错误:应在“zzz”之前出现“;”
//模板myComparator cmp;也不起作用
排序(cmp);
}
};
课堂测试
{
公众:
类比较器
{
公众:
布尔运算符()(常数测试*t1,常数测试*t2)
{
//这里没问题
}
};
};
void testCmp()
{
肌细胞压积仪;
cmp.sort();
}

您必须使用
typename
作为:

  typename T::myComparator cmp; 
//^^^^^^^
typename
是必需的,因为
myComparator
是从属名称

参见StAdppOver自身的这个C++ FAQ:

这是MSVC令人讨厌的一点。它不实现正确的名称查找,并且对依赖名称上的
typename
template
关键字非常松懈。这会导致可移植性噩梦,并且没有编译器选项在这一点上显示警告。
  typename T::myComparator cmp; 
//^^^^^^^