私はこのようなものを持っています:
CLASS CLASS::operator|(CLASS& right) {
return binop(*((CLASS*) this), right, OP_OR);
}
CLASS は単なるクラスです。binopのプロトタイプは
CLASS binop(CLASS& left, CLASS& right, OP op);
これはすべて正常に動作し、Visual C++ 2010 を使用してコンパイルしますが、g++ ではエラーで失敗します。
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 修飾されているためエラーが発生します。演算子の左側と右側のサイズで行うことは、両方が変更可能である必要があります。
私が収集できることから、オブジェクトを渡して関数呼び出しで参照に変換することに問題があるようです...これは私にはあまり意味がありません。助言がありますか?