繁体   English   中英

模板类中的Typedef类型给出编译错误

[英]Typedef-type inside template class gives compile error

实际代码,剥离到最简单的相关部分:

第三方代码

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作为特定的模板类型...仅包含gptr.h就会导致问题。

怎么了

您必须使用typename消除歧义词:

typedef typename BaseType::element_type WrappedType;
//      ^^^^^^^^^

没有它,编译器将不会将element_type解析为type的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM