• <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>
            posts - 5, comments - 40, trackbacks - 0, articles - 0

            GCC不能正確繼承模板類?

            Posted on 2008-03-02 07:10 Wang Jinbo 閱讀(3667) 評論(8)  編輯 收藏 引用 所屬分類: C++
            GCC編譯器似乎不能理解繼承自模板類里的數(shù)據(jù)成員。我還以為是代碼的問題,郁悶了半天后,居然在Borland C++ 5.5下編譯通過了。節(jié)省篇幅,我抽出主要部分。
            template<class T>  
            class A{  
                
            protected:  
                    T id;  
            };  
            template
            <class T>  
            class B: public A<T>{  
                
            public:  
                    
            void setid(T i){  
                        id
            =i;  
                    }  
                    
            void test1(){  
                        cout
            <<"B::test1() ID: "<<id<<endl;  
                    }  
            };
            B類的id本應該是從A類里繼承來的,但用GCC編譯會提示說變量id未定義。試著用Borland的編譯器就很痛快地過了。我使用的是MinGW的 GCC 3.4,但我在Unix-Center的機器上使用Unix和Linux版本的GCC 4.0編譯仍然通不過,但Solaris上的Sun Studio的C++編譯器則沒問題。
            難道就這么幸運地碰上GCC的Bug了?

            Feedback

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-02 09:22 by Santa
            你要是用到父類變量需要加 this->
            或者在子類聲明的時候標明 using A;

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-02 09:39 by 死循環(huán)ing...
            template<class T>
            class A{
            protected:
            T id;
            };
            template<class T>
            class B: public A<T>{
            public:
            void setid(T i){
            A<T>::id=i;
            }
            void test1(){
            cout<<"B::test1() ID: "<<A<T>::id<<endl;
            }
            };
            根據(jù)錯誤提示,說明未指定域,所以修改了一下,就通過了,原因不明(= =")
            GCC4.2.1-sjlj

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-02 11:33 by 空明流轉
            這似乎是gcc編譯器本身的問題。

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-02 12:06 by stO
            G++做的是對的,你應該回去好好看看C++標準.
            同時你可以用-fpermissive放寬要求

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-02 15:56 by 空明流轉
            @stO
            大部分編譯器的實現(xiàn)都是在初始化列表里滿足此項要求,而構造函數(shù)體這一要求都放寬了,跟人覺得這一要求也確實沒有什么道理,因為在調用子類構造函數(shù)的時候基類都已經(jīng)構造完畢了。標準也只是標準而已。

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-03 13:48 by eXile
            這個設計到模板的兩次掃描機制,VC或BC的做法可以使編譯略微快一些,但是會對一些還沒有實例化的模板代碼中的語法錯誤視而不見,而GCC的做法更為穩(wěn)妥一些,也是符合標準的的行為。

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-03-05 10:49 by zhiyong
            “對一些還沒有實例化的模板代碼中的語法錯誤視而不見”
            是完全符合 C++ 標準的,而且這種特性還是有用的

            # re: GCC不能正確繼承模板類?  回復  更多評論   

            2008-07-14 10:56 by ytj
            經(jīng)測試,用using a;A<T>::id;this->都可以解決問題,不過G++的這個特性讓我很不爽。
            欧美伊人久久大香线蕉综合| 国产精品天天影视久久综合网| 99久久精品免费看国产免费| 草草久久久无码国产专区| 久久精品国产亚洲AV不卡| 色婷婷久久综合中文久久一本| 午夜人妻久久久久久久久| 国产2021久久精品| 国产精品久久婷婷六月丁香| AV无码久久久久不卡蜜桃| 久久久久久毛片免费看| 久久人人爽人人爽人人AV东京热| 国产精品成人久久久久三级午夜电影 | 香蕉aa三级久久毛片| 久久精品国产91久久综合麻豆自制 | 人妻无码久久精品| 国产美女亚洲精品久久久综合| 精品久久久久久无码专区不卡 | 久久久SS麻豆欧美国产日韩| 久久精品国产亚洲综合色| 久久中文字幕人妻熟av女| 久久99精品久久久久久秒播| 欧美黑人激情性久久| 区久久AAA片69亚洲| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 精品国产综合区久久久久久| 久久丫忘忧草产品| 欧美亚洲另类久久综合婷婷| 久久精品国产精品国产精品污| 性欧美大战久久久久久久久| 久久久久高潮综合影院| 午夜精品久久久久久影视riav| 精品久久久久国产免费| 办公室久久精品| 久久国产美女免费观看精品| 国产精品99久久久久久猫咪 | 亚洲国产成人精品无码久久久久久综合| 久久综合久久综合九色| 国产精品久久网| 青青草原综合久久大伊人精品| 国产成人久久精品区一区二区|