具有Typedef变量的模板类编译问题

时间:2018-09-05 16:52:33

标签: c++ templates typedef

我在使用较新的C ++编译器(从Visual C ++ 6.0到Visual C ++ 2015)编译模板类时遇到问题。所有错误都集中在该类中的少数typedef周围。这是头文件的一个片段:

template<class Type> class Vector
{
public:
    typedef Type* iterator;
    typedef const Type* const_iterator;
    typedef Type& reference;
    typedef const Type& const_reference;
    typedef size_t size_type;

    Vector();
    Vector( size_type Size, const_reference Object = Type() );

    ...

private:
    VectorImpl<Type>* m_pImpl;
};

template <typename Type> Vector<Type>::Vector()
{
    m_pImpl = new VectorImpl<Type>();
};

template <typename Type> Vector<Type>::Vector(Vector<Type>::size_type Size, Vector<Type>::const_reference Object)
{
    m_pImpl = new VectorImpl<Type>(Size, Object);
};

...

当编译器尝试构建模板方法实现时,遇到typedef参数时会引发错误(即' Vector :: size_type Size '),我得到了一个 C2988无法识别的模板声明/ definition ”错误。在其他情况下,我收到' C2061语法错误:标识符'size_type''错误。

在模板类中使用typedef是否存在格式问题或兼容性问题?

1 个答案:

答案 0 :(得分:0)

由于size_type是从属类型,因此您需要将其称为typename Vector::size_type,以使编译器确信该符号表示每种可能的Vector专业化类型。远古的Visual C可以在没有typename的情况下接受它(但在C ++模板的其他方面却失败了很多。)