真实代码,剥离到最简单的相关部分:
第三方代码
template<class T>
class Ptr
{
private:
typedef Ptr this_type;
public:
typedef T element_type;
};
typedef Ptr<DataSet> DataSetPtr;
我的代码 - GPtr.h
template<class BaseType>
class GPtr
{
///force BaseType to be a Ptr or subclass
typedef BaseType::element_type WrappedType;
public:
...
};
如果我删除BaseType::element_type
对它的引用编译正常,但在我得到编译警告/错误:
- 警告 C4346:“BaseType::element_type”:从属名称不是带有“typename”以指示类型的类型前缀
- 错误 C2146:语法错误:缺少“;” 在标识符“WrappedType”之前
我什至没有在我的代码中使用 GPtr
任何地方作为特定的模板类型......简单地包括 gptr.h 会导致问题。
这里有什么问题?