2013-02-07 97 views
0

幾周前我開始使用模板,但使用它時遇到問題。 我得到這個錯誤:模板類中定義的類型「不命名類型」

自由式/ _gl /../_ convection_selective/Definitions.h:153:9:錯誤:Node_handle'在「Point_set {又名結構Kd_tree_patch>> *,My_point_property_map,CGAL :: Search_traits>>,常量雙*,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

你缺少一個'typename'存在(這是一個依賴型)... – Nim

+0

你開始幾周前使用模板?啊呀。 – Salgar

+0

@NIm你的意思是:typedef typename Point_set :: Node_handle Node_handle;如果是這樣,我嘗試了,但我得到了同樣的錯誤。 – Kamouth

回答

2

不能向前聲明嵌套類型,這意味着能夠使用嵌套式Node_handle,模板Kd_tree_patch必須 typedef的之前定義。一旦你解決這個問題,你還需要指示編譯器,它是通過使用typename類型:

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

+1我錯過了前向宣言位... – Nim

+0

感謝您的幫助! – Kamouth