将对象变量传递为const ..&

时间:2014-04-23 23:41:53

标签: c++ const

我有一个看起来像

的功能
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&什么时候它是指针?

2 个答案:

答案 0 :(得分:5)

您的问题是do_bigadd不是constthis 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的答案)