2014-09-03 2 views
0

Я получаю много ошибок от gcc при попытке выполнить этот метод. zone_ являетсяstd :: vector with const указатель на объект const не компилируется

std::map<int,std::vector<Zone const * const>> 

Это частный участник MyClass.

//get unique zones 
std::vector<Zone const* const> MyClass::getZones() const { 
    std::vector<Zone const * const> zones; //why can I not do this??? 
    std::map<Zone const * const,int> zone_set; 
    for(auto & pair : zones_) { 
     for(Zone const * const z : pair.second) { 
      if(zone_set.count(z) == 0) { 
      zone_set[z] = 1; 
      zones.push_back(z); //cannot do this 
      } 
     } 
    } 
return zones; 
} 

Могу ли я иметь вектор константных указателей на объекты const?

+0

Можете ли вы разместить ошибки? Мне это интересно –

ответ

3

нет, типа элемента не может быть константным (может быть указатель на константный тип, хотя)

также нет необходимости в этом, так как при возврате константной ссылки на ваш вектор, доступ к элементам будут be const_reference: http://www.cplusplus.com/reference/vector/vector/operator[]

3

Нет. В общем, элементы векторов не могут быть const, так как они должны быть перемещены, когда массив векторов нуждается в перераспределении. Вам нужно будет хранить Zone const *; или, возможно, использовать другой тип контейнера (list, deque или, возможно, set), если вам действительно нужны постоянные элементы.

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