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:错误:类型“管理器”不是从类型“容器”派生的</p>

prog.cpp:15: 错误: 预期 ';' 在'm_obj'之前</p>

谢谢

4

1 回答 1

4

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

typename MANAGER::Object_t m_obj;

第一条错误消息意味着编译器将作用域MANAGER::标记视为试图访问Container. 第二条错误消息表明编译器不知道它m_obj应该是一个数据成员,因为它没有将它之前的标记识别为一种类型。

于 2012-07-02T18:18:13.060 回答