如何访问模板模板类的typedef

时间:2012-07-02 18:14:17

标签: c++ templates typedef

尝试编译以下代码时:

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'类型派生的

prog.cpp:15:错误:'m_obj'之前预期';'

由于

1 个答案:

答案 0 :(得分:4)

您需要typename,因为编译器在解析模板时不知道MANAGER::Object_t引用了类型。

typename MANAGER::Object_t m_obj;

第一条错误消息表示编译器将scoped MANAGER::标记视为尝试访问Container的基类成员。第二条错误消息表明编译器不知道m_obj应该是数据成员,因为在它成为类型之前它不识别令牌。