2013-07-15 5 views
2

Я пытаюсь использовать подталкивание :: вариантвектора повышающего-варианта

std::vector<boost::variant<mesh::Entity&, mesh::Vertex, mesh::Edge> > 
    xField::getZeros(const mesh::Region& s, char *EntityS) const 
{ 
//Vertex 
    if(EntityS == "V") 
    { 
    std::vector<mesh::Vertex> zeros; 
    for(Region::vertexIterator itv = s.beginVertex(); 
     itv != s.endVertex(); ++itv) 
    { 
     if(abs(getVal(*itv)) < 1.e-12)  
     zeros.push_back(*itv); 
    } 
     return zeros;  
    } 
else if .. 

, но я получаю сообщение об ошибке: ошибки: преобразование из «станд :: вектор» к нескалярных типа «станд :: вектор>»просил

EDIT:

zeroVector xField::getZeros(const mesh::Region& s, char *EntityS) const 
{ 
//Vertex 
    if(EntityS == "V") 
    { 
    zeroVector zeros; 
    for(Region::vertexIterator itv = s.beginVertex(); itv != s.endVertex(); ++itv) 
    { 
     if(abs(getVal(*itv)) < 1.e-12)  
     zeros.push_back(zeroVariant(*itv)); 
    } 
     return zeros; 

и определяю ЬурейеЕ в файле .h

typedef boost::variant<mesh::Entity&, mesh::Vertex, mesh::Edge> zeroVariant; 
typedef std::vector<zeroVariant> zeroVector; 

и теперь у меня есть следующие ошибки:

/softs/boost/1.53.0/64/gcc/4.5.1/include/boost/detail/reference_content.hpp: В функции члена «недействительным boost :: detail :: variant :: assign_storage :: internal_visit (T &, int) const [с T = boost :: detail :: reference_content] ': /softs/boost/1.53.0/64/gcc/4.5. 1/include/boost/variant/detail/visitation_impl.hpp: 130: 9: экземпляр из 'typename Visitor :: result_type boost :: detail :: variant :: visitation_impl_invoke_impl (int, Visitor &, VoidPtrCV, T *, mpl_ :: true_) [с Visitor = boost :: detail :: variant :: assign_storage, VoidPtrCV = void *, T = boost :: detail :: reference_content, typename Visitor :: result_type = void, mpl _ :: true_ = mpl _ :: bool_] ' /softs/boost/1.53.0/64/gcc/4.5.1/include/boost/variant/detail/visitation_impl.hpp:173:9: экземпляр из' typename Visitor :: result_type boost :: detail :: variant :: visitation_impl_invoke (int, Visitor &, VoidPtrCV, T *, NoBackupFlag, int) [с Visitor = boost :: detail :: variant :: assign_storage, VoidPtrCV = void *, T = boost :: detail :: reference_content, NoBackupFlag = boost :: variant :: has_fallback_type_, typename Visitor :: result_type = void] ' /softs/boost/1.53.0/64/gcc/4.5.1/include/boost /variant/detail/visitation_impl.hpp:260:1: экземпляр из 'typename Visitor :: result_type boost :: detail :: variant :: visitation_impl (int, int, Visitor &, VoidPtrCV, mpl _ :: false_, NoBackupFlag, который * , step0 *) [with Which = mpl _ :: int_ < 0>, step0 = boost :: detail :: variant :: visitation_impl_step, boost :: detail :: reference_cont ent, boost :: mpl :: l_item, mesh :: Vertex, boost :: mpl :: l_item, mesh :: Edge, boost :: mpl :: l_end>>>>, boost :: mpl :: l_iter>, посетитель = boost :: detail :: variant :: assign_storage, VoidPtrCV = void *, NoBackupFlag = boost :: variant :: has_fallback_type_, typename Visitor :: result_type = void, mpl _ :: false_ = mpl _ :: bool_] ' /softs/boost/1.53.0/64/gcc/4.5.1/include/boost/variant/variant.hpp: 2326: 13: экземпляр из 'static typename Visitor :: result_type boost :: variant :: internal_apply_visitor_impl (int, int, посетитель &, VoidPtrCV) [с Visitor = boost :: detail :: variant :: assign_storage, VoidPtrCV = void *, T0_ = mesh :: Entity &, T1 = mesh :: Vertex, T2 = mesh :: Edge, T3 = boost: : detail :: variant :: void_, T4 = boost :: detail :: variant :: void_, T5 = boost :: detail :: variant :: void_, T6 = boost :: detail :: variant :: void_, T7 = boost :: detail :: variant :: void_, T8 = boost :: detail :: variant :: void_, T9 = boost :: detail :: variant :: void_, T 10 = boost :: detail :: variant :: void_, T11 = boost :: detail :: variant :: void_, T12 = boost :: detail :: variant :: void_, T13 = boost :: detail :: variant :: void_, T14 = boost :: detail :: variant :: void_, T15 = boost :: detail :: variant :: void_, T16 = boost :: detail :: variant :: void_, T17 = boost :: detail :: variant :: void_, T18 = boost :: detail :: variant :: void_, T19 = boost :: detail :: variant :: void_, typename Visitor :: result_type = void] ' /softs/boost/1.53.0/64 /gcc/4.5.1/include/boost/variant/variant.hpp: 2337: 13: экземпляр из 'typename Visitor :: result_type boost :: variant :: internal_apply_visitor (посетитель &) [с Visitor = boost :: detail :: variant :: assign_storage, T0_ = mesh :: Entity &, T1 = mesh :: Vertex, T2 = mesh :: Edge, T3 = boost :: detail :: variant :: void_, T4 = boost :: detail :: variant :: void_, T5 = boost :: detail :: variant :: void_ , T6 = boost :: detail :: variant :: void_, T7 = boost :: detail :: variant :: void_, T8 = boost :: detail :: variant :: void_, T9 = boost :: detail :: variant: : void_, T10 = boost :: detail :: variant :: void_, T11 = boost :: detail :: variant :: void_, T12 = boost :: detail :: variant :: void_, T13 = boost :: detail :: Вариант :: void_, T14 = boost :: detail :: variant :: void_, T15 = boost :: detail :: variant :: void_, T16 = boost :: detail :: variant :: void_, T17 = boost :: detail :: variant :: void_, T18 = boost :: detail :: variant :: void_, T19 = boost :: detail :: variant :: void_, typename Visitor :: result_type = void] ' /softs/boost/1.53.0/64/gcc/4.5.1/include/boost/variant/variant.hpp: 2085: 13: экземпляр из 'void boost :: variant :: variant_assign (const boost :: variant &) [с T0_ = сетка :: Entity &, T1 = mesh :: Vertex, T2 = mesh :: Edge, T3 = boost :: detail :: variant :: void_, T4 = boost :: detail :: variant :: void_, T5 = boost :: detail :: variant :: void_, T6 = boost :: detail :: variant :: void_, T7 = boost :: detail :: variant :: void_, T8 = boost :: detail :: variant :: void_, T9 = boost :: detail :: variant :: void_, T10 = boost :: detail :: variant :: void_, T11 = boost :: detail :: variant :: void_, T12 = boost :: detail :: variant :: void_, T13 = boost :: detail :: variant :: void_, T14 = boost :: detail :: variant :: void_, T15 = boost :: detail :: variant :: void_, T16 = boost :: detail :: variant :: void_ , T17 = boost :: detail :: variant :: void_, T18 = boost :: detail :: variant :: void_, T19 = boost :: detail :: variant :: void_, boost :: variant = boost :: variant] ' /softs/boost/1.53.0/64/gcc/4.5.1/inclu de/boost/variant/variant.hpp: 2175: 9: экземпляр из «boost :: variant» & boost :: variant :: operator = (const boost :: variant &) [с T0_ = mesh :: Entity &, T1 = mesh :: Vertex, T2 = mesh :: Edge, T3 = boost :: detail :: variant :: void_, T4 = boost :: detail :: variant :: void_, T5 = boost :: detail :: variant :: void_ , T6 = boost :: detail :: variant :: void_, T7 = boost :: detail :: variant :: void_, T8 = boost :: detail :: variant :: void_, T9 = boost :: detail :: variant: : void_, T10 = boost :: detail :: variant :: void_, T11 = boost :: detail :: variant :: void_, T12 = boost :: detail :: variant :: void_, T13 = boost :: detail :: Вариант :: void_, T14 = boost :: detail :: variant :: void_, T15 = boost :: detail :: variant :: void_, T16 = boost :: detail :: variant :: void_, T17 = boost :: detail :: variant :: void_, T18 = boost :: detail :: variant :: void_, T19 = boost :: detail :: variant :: void_, boost :: variant = boost :: variant] ' /usr/include/C++/4.5/бит/vector.tcc: 312: 4: экземпляр из 'void std :: vector < _Tp, _Alloc> :: _ M_insert_aux (std :: vector < _Tp, _Alloc> :: iterator, const _Tp &) [с _Tp = boost :: variant , _Alloc = std :: allocator>, std :: vector < _Tp, _Alloc> :: iterator = __gnu_cxx :: __ normal_iterator *, std :: vector>>, typename std :: _ Vector_base < _Tp, _Alloc> :: _ Tp_alloc_type :: pointer = boost :: variant *] ' /usr/include/c++/4.5/bits/stl_vector.h:749:4: экземпляр из' void std :: vector < _Tp, _Alloc> :: push_back (const value_type &) [с _Tp = boost :: variant, _Alloc = std :: allocator>, value_type = boost :: variant] ' /home/mycode.cc:128:42: экземпляр здесь /softs/boost/1.53.0/ 64/gcc/4.5.1/include/boost/detail/reference_content.hpp: 62: 24: ошибка : 'boost :: detail :: reference_content & boost :: detail :: reference_content :: operator = (const boost :: detail :: reference_content &) [с RefT = mesh :: Entity &, boost :: detail :: reference_content = boost :: detail :: reference_content] 'является закрытым /softs/boost/1.53.0/64/gcc/4.5.1/include/boost/variant/variant.hpp:526:9: ошибка: в этом контексте

спасибо заранее !!!!!

ответ

2

Вам нужно будет изменить тип «нули» - он не может конвертировать из std::vector<mesh::Vertex> в вектор вашего варианта.Используйте несколько определений типов, чтобы сделать код менее многословным тоже:

typedef boost::variant<mesh::Entity&, mesh::Vertex, mesh::Edge> EvVariant; 
typedef std::vector<EvVariant> EvVariantVector; 

EvVariantVector xField::getZeros(const mesh::Region& s, char *EntityS) const 
{ 
//Vertex 
    if(EntityS == "V") // This line is probably a bug! 
    { 
    EvVariantVector zeros; // Use the return type here! 
    for(Region::vertexIterator itv = s.beginVertex(); itv != s.endVertex(); ++itv) 
    { 
     if(abs(getVal(*itv)) < 1.e-12)  
     zeros.push_back(EvVariant(*itv)); 
    } 
     return zeros;  
    } 
else if .. 

Также линия if (EntityS == "V") не является правильным, и, вероятно, не в состоянии. используйте strcmp или просто сравните первый символ строки.

+0

спасибо, но когда я определяю «EvVariantVector xField :: getZeros (const mesh :: Region & s, char * EntityS) const« в файле .h, но в .cpp-файле он не распознает «EvVariantVector», и я получил следующая ошибка: ошибка: 'boost :: detail :: reference_content & boost :: detail :: reference_content :: operator = (const boost :: detail :: reference_content &) [с RefT = mesh :: Entity &, boost :: detail :: reference_content = boost :: detail :: reference_content ] 'является закрытым –

+0

Где вы помещаете typedef и можете ли cpp увидеть его? Поместите typedef в файл h. – Pete

+0

ах только что увидел ваше изменение на вопрос ... – Pete

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