1

次のコードをコンパイルしようとすると:

class Object
{
};

template <class OBJECT>
class Manager
{
public:
    typedef OBJECT Object_t;
};

template <class MANAGER>
class Container
{
    MANAGER::Object_t m_obj;
};

Container<Manager<Object> > container;

次のエラーが表示されます。

prog.cpp:15: エラー: タイプ 'MANAGER' はタイプ 'Container' から派生していません</p>

prog.cpp:15: エラー: 予想される ';' 'm_obj' の前</p>

ありがとう

4

1 に答える 1

4

コンパイラは、テンプレートの解析時に型を参照していることをtypename認識しないため、必要です。MANAGER::Object_t

typename MANAGER::Object_t m_obj;

最初のエラー メッセージは、コンパイラがスコープMANAGER::トークンを の基本クラス メンバーにアクセスしようとしていると見なしていることを意味しますContainerm_obj2 番目のエラー メッセージは、それがデータ メンバーであることをコンパイラが認識していなかったことを示しています。

于 2012-07-02T18:18:13.060 に答える