У меня есть функция, которая сводится к этому (часть, с которой я борюсь, игнорируя вещи, которые на самом деле происходят)
class CellSorter
{
public:
bool operator()( std::shared_ptr<const Cell> a,
std::shared_ptr<const Cell> b ) const
{
return ( ( a->GetY() < b->GetY() ) ||
( a->GetY() == b->GetY() &&
a->GetX() < b->GetX() ) );
}
};
typedef std::set<std::shared_ptr<Cell>, CellSorter> Container;
MyClass::Container MyClass::DoSomething( std::shared_ptr<const Cell> c )
{
MyClass::Container N;
// assume that this code works to copy some stuff to N, blah blah blah
std::remove_copy_if( _grid.begin(), _grid.end(),
std::inserter( N, N.begin() ),
std::not1( CellIsNeighbor( c->GetX(), c->GetY() ) ) );
N.erase( c ); // ERROR
return N;
};
Проблема в том, что gcc выдает ошибку:
/ USR / включать / C ++ / 4.4 / бит / shared_ptr.h: 651:
ошибка: неверное преобразование из ‘const
Cell * ’to‘ Cell * ’
Я думал, что это не должно быть приведение объекта "c" от shared_ptr<const Cell>
к shared_ptr<Cell>
, но так или иначе это так. Я хочу, чтобы c указывал на const Cell, потому что нет необходимости изменять его. И у CellSorter не должно быть проблем с const.
Есть идеи, почему я не могу это сделать или как это исправить?