0

数週間前にテンプレートを使い始めましたが、うまく使えません。このエラーが発生しました:

Freestyle/_gl/../_convection_selective/Definitions.h:153:9: エラー: 'Point_set の '<strong>Node_handle' { aka struct Kd_tree_patch > >*, My_point_property_map, CGAL::Search_traits > >, const double*, Construct_coord_iterator > > >}'は型を指定していません

このコードのコンパイル中:

"定義.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 がまだ型と見なされていないのはなぜですか?

ご協力いただきありがとうございます。

4

1 に答える 1

3

ネストされた型を前方宣言することはできません。つまり、ネストされた型を使用できるようにするには、typedefの前にNode_handleテンプレートKd_tree_patchを定義する必要があります。これを修正したら、次を使用して、それが型であることをコンパイラーに指示する必要もあります。typename

typedef typename Point_set::Node_handle Node_handle;
//      ^^^^^^^^
于 2013-02-07T14:45:22.537 に答える