我有一个看起来像
的功能bigvalue_t do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {
}
在这里被称为
bigint bigint::operator+ (const bigint& that) const {
bigint result;
result.big_value = do_bigadd(this->big_value, that.big_value);
}
我收到以下编译错误
错误:将'const bigint'作为'bigvalue_t bigint :: do_bigadd(const bigvalue_t&,const bigvalue_t&)'的'this'参数传递'丢弃限定符[-fpermissive]
我知道出了什么问题,但我想不出办法解决问题。如何使'this'成为const bigint&什么时候它是指针?
答案 0 :(得分:5)
您的问题是do_bigadd
不是const
(this
const
中的operator+
,因此您尝试调用非const const对象this
)的成员函数。你需要do_bigadd
const:
bigvalue_t do_bigadd (const bigvalue_t& left, const bigvalue_t& right) const {
}
如果这反过来导致do_bigadd
中出现任何问题,那么您必须解决这些问题。但是,基于您将两个操作数都传递给do_bigadd
这一事实,我想知道您是否真的意味着它首先是静态或非成员函数。
答案 1 :(得分:4)
你说你有一个功能:
bigvalue_t do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {
}
事实并非如此。您有成员函数:
bigvalue_t bigint::do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {
}
你需要做出这个功能:
const
(如Jason C的答案)