模板類參數(shù)作為容器元素,無法編譯的問題
直接貼一下出錯(cuò)的代碼:
template<class T>
class GSession

{
public:
typedef std::list<T> SessionList;
typedef SessionList::iterator SessionIter;
bool SendCmd(int iIdx=0)
{
if (iIdx==0)
{
return false;
}else
{
std::list<int>::iterator iter;
SessionIter se;
for(se=m_sessions.begin(); se != m_sessions.end(); se++)
{
if (se->iIdx==iIdx)
{
return true;
}
}
}
return false;
}

private:
SessionList m_sessions;
};
//typedef SessionList::iterator SessionIter; //修改為:
typedef typename SessionList::iterator SessionIter;或者直接定義:
typename std::list<T>::iterator se;把一個(gè)特殊的名字解釋成一個(gè)類型,而這個(gè)特殊的名字依賴于一個(gè)模板參數(shù),這樣會(huì)使編譯器在指認(rèn)一個(gè)類型時(shí)產(chǎn)生誤解,typename關(guān)鍵字可以告訴編譯器把這種特殊名字解釋為一個(gè)類型。
注:以上問題只發(fā)生在g++上,VC會(huì)自動(dòng)添加故不會(huì)出現(xiàn)錯(cuò)誤。
posted on 2011-03-31 14:52 chib 閱讀(569) 評(píng)論(0) 編輯 收藏 引用

