2009-08-31 7 views
2

私のコンパイラ(VC++ 6.0)には小さな問題があります。私の意見では、このようなコードはエラーを引き起こすはずです。プライベートtypedefが派生クラスで表示される

class Base 
{ 
    private: 
     typedef int T; 
}; 

class Derived : private Base // Here the Base class can be inherited publicly as well. It does not play any role 
{ 
    public: 
     T z; 
}; 



int main() 
{ 
    Derived obj; 
    obj.z = 7; 
    return 0; 
} 

このコードスニペットは、VC++ 6.0でコンパイルされ、問題なく実行されます。

SW-Designに関して、このコードは完璧ではありません。クラスメンバメンバのどれもpublicとして宣言されるべきではありません。しかし、私はこの面に興味がありません。

私の問題はtypedefです。 typedefは、基本クラスでprivateとして宣言されています。私のC++理解の点から、このtypedefは、Derivedクラスまたはmain()関数のどちらにも見えてはいけません。しかし、どちらも完璧に見えます。

誰でもこの現象について説明していますか?事前に

おかげ

Necip

+0

私はVS 2008でコンパイルしようとしました。クラスBaseで宣言されているプラ​​イベートtypedefにはアクセスできません。なぜそれがVS 6で大丈夫なのか興味深いです。 –

+3

VC6には、規格に準拠していないという多くの問題があります。 –

+0

@Svetlozar、VC++ 6.0は古く、標準的な出版物であるIIRCよりも前でさえあります。いつものように、不適合の理由は、言語が変化した時代遅れから拡張によって渡されるバグ、そして問題のための標準の祝福されたものとは異なる解決の結果にまで及ぶ。 – AProgrammer

答えて

7

は、この動作は、VC++ 6.0で非適合である派生:: Zを定義するとき、あなたはエラーを持っている必要があります。 (ビジネス上の理由がある場合を除いて、VC++ 6.0よりも技術的に好ましい選択肢は、古いです)。

関連する問題