1.缺少实例化参数,无法实例化模版,报错 need typename before std::set<_Ty>::const)iterator because std::set<_Ty> is a dependent scope
1 template<typename T> 2 void Common::CUtil::makeExcludeSet(std::set<T>& originalSet, const std::set<T>& excludeSet) 3 { 4 if (originalSet.empty()|| excludeSet.empty()) 5 { 6 return; 7 }
8 //正确代码为for (typename std::set<T>::const_iterator excluedeElementIter = excludeSet.begin(); excluedeElementIter != excludeSet.end(); ++excluedeElementIter) 9 for ( std::set<T>::const_iterator excluedeElementIter = excludeSet.begin(); excluedeElementIter != excludeSet.end(); ++excluedeElementIter) 10 { 11 if (originalSet.find(*excluedeElementIter) != originalSet.end()) 12 { 13 originalSet.erase(*excluedeElementIter); 14 if (originalSet.empty()) 15 { 16 return; 17 } 18 } 19 } 20 }
以上代码可以通过vs的编译,但是无法通过linux环境下编译,原因是编译器不知道 std::set<T>::const_iterator 是一个类型还是变量,需要在前面添加typename 告诉编译器,这是一个变量类型,而非类中的静态变量尔尔。
原文:https://www.cnblogs.com/jing19960917/p/13921400.html