У меня есть что-то вроде этого:Использование `this` в операторов
CLASS CLASS::operator|(CLASS& right) {
return binop(*((CLASS*) this), right, OP_OR);
}
CLASS только некоторый класс. Прототип бинарным оператором является
CLASS binop(CLASS& left, CLASS& right, OP op);
Это все работает отлично и компилирует с помощью Visual C++ 2010, но не в г ++ с ошибкой:
someheader.h: In member function 'void CLASS::set(int64_t)':
someheader.h:469:29: error: no match for 'operator|' in '*(CLASS*)this | CLASS(bit)'
someheader.h:469:29: note: candidate is:
someheader.h:376:1: note: CLASS CLASS::operator|(CLASS&)
someheader.h:376:1: note: no known conversion for argument 1 from 'CLASS' to 'CLASS&'
Теперь у меня возникли проблемы только проездом текущий объект (* this) в качестве некоторого параметра, поэтому я явно изгоняю его, чтобы удалить определитель const
на указателе, который отлично работает и, кажется, обманул компилятор Visual C++, чтобы принять его как обычный указатель. g ++, похоже, не нравится. Если я удалю бросок, он все равно даст мне ошибку, так как this
является const-квалифицированным. То, что я делаю с левым и правым размером операторов, требует, чтобы оба изменялись.
Из того, что я могу собрать, кажется, что есть проблема с передачей какого-либо объекта и преобразованием его в ссылку в вызове функции ... Это не имеет для меня большого смысла. Какие-либо предложения?
Что с funky '* ((CLASS *) this)', если функция является членом CLASS? – chris
Как я уже сказал, компилятор не понравился, когда я просто использовал '* this', поэтому я сделал бросок, чтобы сделать его счастливым. – Pochi
О, это не должно быть так. Возможно, ваша функция 'set' будет стоить того, так как это ошибка. На самом деле, существует ли проблема с 'CLASS & right', которая является' const CLASS & right'? – chris