2013-05-08 2 views
3

Итак, я пытаюсь создать структуру TileSet и переопределить оператор <, а затем поставить TileSet в очередь приоритетов. Я прочитал, что я не могу назвать неконстантные методы константной ссылки, но не должен быть действительно проблемой, я просто доступ пользователей, а не их изменениями:C++ struct - Передача const, поскольку этот аргумент отбрасывает квалификаторы

struct TileSet 
    { 

     // ... other struct stuff, the only stuff that matters 

     TileSet(const TileSet& copy) 
     { 
      this->gid = copy.gid; 
      this->spacing = copy.spacing; 
      this->width = copy.width; 
      this->height = copy.height; 
      this->texture = copy.texture; 
     } 

     bool operator<(const TileSet &b) 
     { 
      return this->gid < b.gid; 
     } 
    }; 

Сообщения об ошибке говорит мне: минуя 'const TileSet' as 'this' argument of 'bool TileSet::operator<(const TileSet&)' discards qualifiers [-fpermissive] Что это значит? Изменение переменных в const не сработало, и мне нужно, чтобы они были неконстантными.

Ошибка возникает, когда я пытаюсь сделать:

std::priority_queue<be::Object::TileSet> tileset_queue;

+0

Возможный дубликат [C++ «Прохождение как отбрасывает квалификаторы»] (http://stackoverflow.com/questions/10226787/c-passing-as-this-discards-qualifiers) – Jack

+0

Я думаю, вы могли бы искать google перед тем, как спросить : http://stackoverflow.com/questions/10226787/c-passing-as-this-discards-qualifiers http://stackoverflow.com/questions/5973427/error-passing-xxx-as-this-argument-of -xxx-discards-qualifiers http://stackoverflow.com/questions/2412608/g-const-discards-qualifiers – Jack

ответ

5

Вы должны добавить const спецификатор к определению operator< метода:

bool operator<(const TileSet &b) const 
           // ^^^ add me 
{ 
    return this->gid < b.gid; 
} 

Это говорит компилятору, что this параметр, переданный функции, является константой, иначе он не позволит вам передать константную ссылку как параметр this.

0

Попробуйте сделать оператор < Функция const member.

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

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