我有这样的事情:
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 限定的。我对运算符的左右大小所做的操作要求两者都是可变的。
据我所知,我传递一些对象并将其转换为函数调用中的引用似乎存在问题......这对我来说没有多大意义。有什么建议么?