真实代码,剥离到最简单的相关部分:
template<class T>
class Ptr
{
private:
typedef Ptr this_type;
public:
typedef T element_type;
};
typedef Ptr<DataSet> DataSetPtr;
template<class BaseType>
class GPtr
{
///force BaseType to be a Ptr or subclass
typedef BaseType::element_type WrappedType;
public:
...
};
如果我删除对BaseType::element_type
的引用,它编译得很好,但是在我得到编译警告/错误时
我甚至没有在我的代码中的任何地方使用 GPtr
作为特定的模板类型...只是包含gptr.h导致问题。
这里有什么问题?
答案 0 :(得分:2)
您必须使用typename
消歧器:
typedef typename BaseType::element_type WrappedType;
// ^^^^^^^^^
如果没有它,编译器将不会将element_type
解析为类型的名称。