尝试编译以下代码时:
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'之前预期';'
由于
答案 0 :(得分:4)
您需要typename
,因为编译器在解析模板时不知道MANAGER::Object_t
引用了类型。
typename MANAGER::Object_t m_obj;
第一条错误消息表示编译器将scoped MANAGER::
标记视为尝试访问Container
的基类成员。第二条错误消息表明编译器不知道m_obj
应该是数据成员,因为在它成为类型之前它不识别令牌。