В настоящее время я работаю над назначением относительно мобильных роботов. Я разрабатываю Windows с помощью QT-Creator, используя CMake и Visual C++ Compiler 10.0.C++ нет соответствия для 'operator ='
Как робот работает над Ubuntu, мне нужно скомпилировать проект с помощью QT-Creator на Ubuntu с компилятором GNU x86.
Теперь вот проблема, относительно класса Box
, который только хранящий некоторые Инт-значения:
Box.h
public:
Box();
Box(int name, int sX, int sY, int width, int heigth);
Box& operator = (Box &src);
bool operator == (Box &src);
private:
int name;
int startX, startY, endX, endY;
int cgx, cgy;
int width, height;
Есть также некоторые Get-методы в этом заголовке (как int getName()).
Перегруженное присвоение оператор выглядит следующим образом:
Box &Box::operator =(Box &src){
this->cgx = src.getCenterX();
this->cgy = src.getCenterY();
this->endX = src.getEndX();
this->endY = src.getEndY();
this->startX = src.getStartX();
this->startY = src.getStartY();
return *this;}
Я использую объекты Box в другом классе, хранящиеся в std::list<Box>
.
В Windows все работает нормально. Но на Ubuntu я получаю сообщение об ошибке no match for 'operator=' (operand types are 'Box' and 'const Box')
, которое происходит в функции std::list
.
Я совершенно не знаком с C++ и не использовал const
в любом месте. Итак, как происходит эта ошибка и как ее решить?
'Box & operator = (const Box &src);' – Borgleader
В дополнение к другим комментариям 'bool operator == (const Box & src) const'; для' == 'также (параметр' const & 'и маркировать метод как 'const'). – crashmstr
... и затем маркировать все методы' get ... 'const, так что их можно вызвать на' src'. Это, как правило, хорошая практика, во всяком случае, не только решения для эта конкретная проблема. –