C ++模板+ typedef

时间:2010-12-21 17:45:10

标签: c++ templates typedef

以下代码有什么问题:

Point2D.h

template <class T> 
class Point2D 
{     
   private:
         T x;
         T y; 
   ... 
 };

PointsList.h

template <class T>
class Point2D;

template <class T>
struct TPointsList
{
    typedef std::vector <Point2D <T> > Type;
};

template <class T>
class PointsList
{
    private:
            TPointsList <T>::Type points;  //Compiler error
 ...
};

我想创建没有直接类型规范的新用户类型TPointsList ......

5 个答案:

答案 0 :(得分:5)

添加typename

...
typename TPointsList<T>::Type points;
...

请参阅Why do we need typename here?

答案 1 :(得分:4)

您是否尝试过使用typename关键字?

template <class T>
class Points2DList
{
    private:
            typename TPoints2DList <T>::Type points;  //using the typename keyword
 ...
};

答案 2 :(得分:2)

其他人已经回答了您的问题,但我认为,如果您想知道为什么需要 typename,那么您可能会看到以下主题:

Use of typename keyword with typedef and new

答案 3 :(得分:1)

这个问题有点不清楚,但看起来你试图在没有Point2D模板定义的情况下实例化Point2D的向量。尝试将#include "Point2D.h"添加到PointsList.h的顶部。正如其他回答者所提到的那样,你也试图在没有typename的情况下使用合格的依赖类型,所以你也应该添加更改行

TPointsList <T>::Type points;  //Compiler error

为:

typename TPointsList <T>::Type points;

答案 4 :(得分:-1)

什么是TPoints2DList?它没有在任何地方声明。

既然TPoints2DList被声明为struct,它就会被引用:

   private:
            struct TPointsList <T>::Type points;  //should compile now