2014-12-25 4 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' - объявить тип * псевдонима *. Оба равны, это не дополнительный тип. Я имею в виду 'std :: is_same :: value' - true для' typedef type1 type2; '. – Jarod42

+0

Спасибо Jarod. У меня есть -1, и я не могу удалить вопрос, потому что на него ответили сейчас. Что мне делать? – gsamaras

Смежные вопросы