2014-12-25 33 views
1

我有這個類,但是我只在BOOST的情況下出錯。Division_Euclidean_space.h錯誤:'vertex_t'不是一個類型

template<typename T> 
class Division_Euclidean_space { 
public: 
    typedef T FT; 

#ifdef RKD_WITH_BOOST 
struct Vertex{ std::vector<FT> v;}; 
typedef struct Vertex Vertex; 

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex > Graph; 
typename boost::graph_traits<Graph>::vertex_descriptor vertex_t; 
#endif 

#ifdef RKD_WITH_BOOST 
    void insert(Graph& g, vertex_t& v) { 
     for(int i = 0; i < g[v].v.size(); ++i) 
      p.push_back(g[v].v[i]); 
    } 
#endif 
... 

我實際上得到了許多錯誤,但我相信,如果我解決這個問題,我會被罰款,然後

Division_Euclidean_space.h:102:25: error: ‘vertex_t’ is not a type 

回答

6

typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;聲明一個變量。

你大概的意思是:

typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t; 
+0

賈羅德,我認爲這是解決這個問題!我發現這個語句:「typedef是聲明一個類型,typename是用來獲取類型的模板」在理解'typename'的方式上!你同意嗎?或者你有更好的東西? – gsamaras

+0

我同意它的一點修改:'typedef'是聲明*別名*類型。兩者都是平等的,它不是一個額外的類型。我的意思是'typedef type1 type2;'的std :: is_same :: value'是真的。 – Jarod42

+0

謝謝Jarod。我有一個-1,我不能刪除這個問題,因爲它現在被回答。我該怎麼辦? – gsamaras

相關問題