模板类中定义的类型“不命名类型”

时间:2013-02-07 14:30:09

标签: c++ templates

几个星期前我开始使用模板,而我在使用它时遇到了麻烦。 我收到了这个错误:

Freestyle / _gl /../_ convection_selective / Definitions.h:153:9:错误:'Point_set 中的' Node_handle '{aka struct Kd_tree_patch> > *,My_point_property_map,CGAL :: Search_traits> >,const double *,Construct_coord_iterator> > >}'未命名类型

编译此代码时

“Definitions.h”:

#include "Kd_tree_patch.h"
[...]
template <class SearchTraits, class Splitter_= CGAL::Sliding_midpoint<SearchTraits>, class UseExtendedNode = CGAL::Tag_true > class Kd_tree_patch;  //forward declaration

typedef Kd_tree_patch<Search_traits> Point_set;    
typedef Point_set::Node_handle Node_handle;

“Kd_tree_patch.h”

template <class SearchTraits, class Splitter_=Sliding_midpoint<SearchTraits>, class UseExtendedNode = Tag_true >
class Kd_tree_patch {
[...]
typedef Kd_tree_node<SearchTraits, Splitter, UseExtendedNode > Node;
typedef typename Compact_container<Node>::iterator Node_handle;
};

为什么不将Node_handle视为一种类型?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您无法转发声明嵌套类型,这意味着为了能够使用嵌套类型Node_handle,必须在 typedef之前定义模板Kd_tree_patch。一旦你解决了这个问题,你还需要通过typename指示编译器它是一个类型:

typedef typename Point_set::Node_handle Node_handle;
//      ^^^^^^^^