c++ 模板 vector::const_iterator報錯

最近研究<< Object Detection and Recognition in Digital Images Theory and Practice >> 這部神作的時候,從網上下載了一份源碼,準備看看效果,結果沒有編譯通過,代碼如下:

...
template < typename T >
class safe_pointer_vector : public vector< T * >
{
    public:
        ...
        typedef vector< T * >   BaseClass;

    ...
    public:
        iterator erase( BaseClass::const_iterator _First_arg, BaseClass::const_iterator _Last_arg )
        {
            DeleteElements( _First_arg, _Last_arg );
            return BaseClass::erase( _First_arg, _Last_arg );       // now call the base
        }

編譯時候死活通不過去,看看代碼感覺也沒啥多少問題,後來查找資料發現 http://www.cnblogs.com/dongzhiquan/p/4050997.html
在c++模板中,使用std::vector::const_iterator時,編譯器假定這樣的名字指定的是數據成員,而不是數據類型成員,如果需要指定爲數據類型成員需要使用 typename 關鍵字
於是改成如下形式, 工程成功編譯
ie, 將 這邊的 BaseClass::const_iterator改爲typename vector<T*>::const_iterator即可

...
template < typename T >
class safe_pointer_vector : public vector< T * >
{
    public:
        ...
        typedef vector< T * >   BaseClass;

    ...
    public:
        iterator erase( typename vector<T*>::const_iterator _First_arg, typename vector<T*>::const_iterator _Last_arg )
        {
            DeleteElements( _First_arg, _Last_arg );
            return BaseClass::erase( _First_arg, _Last_arg );       // now call the base
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章