• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            error C2899: 不能在模板聲明之外使用類型名稱 ?!!

            前天碰到一個問題,當時想著挺納悶的,不知道是什么原因.對"不能在模板聲明之外使用類型名稱"這樣的提示你會想到是什么?我在無意中按F1鍵看到MSDN中的描述才明白是typename關鍵字用錯了,是看它的英文描述才知道的:"typename cannot be used outside a template declaration".真想不到typename會翻譯為類型名稱.看來,以后有莫名其妙的錯誤還是得看英文的幫助文檔啊,不過最好一開始就有英文版的VS.NET.
            以下是具體的描述:


            namespace code
            {

            enum CodeType { UTF_8, UNICODE }
            ;

            template
            < CodeType srcT, CodeType desT >

            struct ConvertType{};

            template
            <>

            struct ConvertType < UTF_8, UNICODE >
            {
                typedef
            char
            srcType;
                typedef wchar_t desType;
            }
            ;

            template
            < CodeType srcT, CodeType desT >

            struct Convert {};

            template
            <>

            struct Convert< UTF_8, UNICODE >
            {
               
            //error C2899: 不能在模板聲明之外使用類型名稱

                typedef typename ConvertType< UTF_8, UNICODE >::srcType srcType;    //!
                typedef typename ConvertType< UTF_8, UNICODE >::desType desType;    //!
            }
            ;

            }
             //namespace code


            /*
            這里根本不需要typename.
            typename除用在模板聲明中外,只能用于說明模板類的成員是一個類型.
            例如:
            template class X {};

            // Another way
            template struct X {
                typedef double DoubleType;

                typename X::DoubleType a;   // T::A is a type
            };

            而如果不是模板類,則不能用typename.這時,它并不是多余的,而是一定不能要的.
            例如:
            template<> struct X< X > {
                typename X::DoubleType a;    //Error! X is not a generic class
                X::DoubleType b;        //OK!
            };

            我前面的代碼也是這樣的情況,ConvertType< UTF_8, UNICODE >已經是一個具體的類了,不要是模板類,所以ConvertType< UTF_8, UNICODE >::srcType前不能加typename.
            */
            posted on 2005-09-24 15:49 可冰 閱讀(462) 評論(5)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: error C2899: 不能在模板聲明之外使用類型名稱 ?!! 2006-03-02 17:01 yajun
            這是VC得一個bug, 再VC7.1以后就可以用了。
            你沒有用錯,是微軟錯了。  回復  更多評論
             

            # re: error C2899: 不能在模板聲明之外使用類型名稱 ?!! 2006-03-02 22:57 可冰
            是嗎?
            我沒有在其它編譯器下測試,只是看了它的錯誤說明,我還以為真是這樣的呢.
            我完了再試一下吧.
            謝謝了!  回復  更多評論
             

            # re: error C2899: 不能在模板聲明之外使用類型名稱 ?!! 2006-03-02 23:08 可冰
            看來還是知識不過硬啊!
              回復  更多評論
             

            # re: error C2899: 不能在模板聲明之外使用類型名稱 ?!! 2006-09-23 22:55 x
            這個也不能算bug 只是vc60附帶的編譯器對標準支持不夠 到其后的版本ms碰到“正確”的語句會說明這個市為了遵從標準 要你寫個typename  回復  更多評論
             

            # re: error C2899: 不能在模板聲明之外使用類型名稱 ?!! 2008-01-03 12:12 yangmi0313@126.com
            我用VS2005怎么也有這個錯誤。  回復  更多評論

            posted on 2008-08-31 21:48 肥仔 閱讀(1963) 評論(0)  編輯 收藏 引用 所屬分類: C++ 模板

            色播久久人人爽人人爽人人片AV| 久久婷婷五月综合色99啪ak| 亚洲国产成人精品女人久久久| 久久伊人影视| 亚洲AV乱码久久精品蜜桃| 久久er国产精品免费观看2| 久久久久国产一区二区三区| 精品久久久久久中文字幕大豆网| 久久综合亚洲欧美成人| 久久九九久精品国产免费直播| 日韩精品久久无码人妻中文字幕| 亚洲天堂久久精品| 一本色道久久综合亚洲精品| 91精品无码久久久久久五月天| 久久精品日日躁夜夜躁欧美| 狠狠色综合久久久久尤物| 欧美大香线蕉线伊人久久| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久天天婷婷五月俺也去| 久久无码人妻一区二区三区| 久久亚洲天堂| 久久久久亚洲AV成人网人人软件| 久久男人Av资源网站无码软件| 理论片午午伦夜理片久久 | 一本色道久久99一综合| 久久久久免费视频| 狠狠色丁香婷婷综合久久来| 亚洲va久久久噜噜噜久久男同| 日韩人妻无码一区二区三区久久99 | 久久精品成人一区二区三区| 国产亚洲美女精品久久久久狼| 久久婷婷五月综合色高清| 亚洲中文字幕无码一久久区| 成人综合久久精品色婷婷| 一本久道久久综合狠狠躁AV| 亚洲国产成人精品91久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 欧美国产成人久久精品| 手机看片久久高清国产日韩| 欧美午夜精品久久久久久浪潮| 四虎影视久久久免费|