lua

模板类参数作为容器元素,无法编译的问题

 直接贴一下出错的代码:

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;

把一个特殊的名字解释成一个类型,而这个特殊的名字依赖于一个模板参数,这样会使编译器在指认一个类型时产生误解,typename关键字可以告诉编译器把这种特殊名字解释为一个类型。
注:以上问题只发生在g++上,VC会自动添加故不会出现错误。

posted on 2011-03-31 14:52 chib 阅读(550) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(1)

随笔档案

牛人录

时政史料

投资管理

源码库

搜索

最新评论

阅读排行榜

评论排行榜