c++模版类

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 告诉编译器,这是一个变量类型,而非类中的静态变量尔尔。

 

posted @ 2020-11-03 17:19  reshuffle  阅读(72)  评论(0编辑  收藏  举报