以下代码有什么问题:
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 ......
答案 0 :(得分:5)
答案 1 :(得分:4)
您是否尝试过使用typename关键字?
template <class T>
class Points2DList
{
private:
typename TPoints2DList <T>::Type points; //using the typename keyword
...
};
答案 2 :(得分:2)
其他人已经回答了您的问题,但我认为,如果您想知道为什么需要 typename
,那么您可能会看到以下主题:
答案 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