几个星期前我开始使用模板,而我在使用它时遇到了麻烦。 我收到了这个错误:
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视为一种类型?
感谢您的帮助。
答案 0 :(得分:2)
您无法转发声明嵌套类型,这意味着为了能够使用嵌套类型Node_handle
,必须在 typedef之前定义模板Kd_tree_patch
。一旦你解决了这个问题,你还需要通过typename
指示编译器它是一个类型:
typedef typename Point_set::Node_handle Node_handle;
// ^^^^^^^^