我有这堂课:
template<Foo::Bar::EType ID,typename TYPE,int NBR>
class NumType
{
public:
typedef TYPE ElementType;
}
在另一个代码区域,我使用ElementType
class VectorType : public NumType<ID,TYPE,NBR>
{
public:
typedef const ElementType* ValueType;
};
但我收到了错误:
错误3错误:未知类型名称'ElementType'
有谁知道为什么?
答案 0 :(得分:3)
如果基类是依赖的,则在非限定名称查找期间不会搜索其范围。要解决此问题,请通过编写typename NumType<ID,TYPE,NBR>::ElementType
而不是仅仅ElementType
来明确命名基类,这使其成为一个依赖名称,并强制将其查找推迟到实例化时间,此时将找到它。
所需的类型也可以由typename VectorType::ElementType
或typename VectorType::NumType::ElementType
命名,但这些代码的读者可能不太清楚。