Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对象变量作为常量传递&_C++_Constants - Fatal编程技术网

C++ 将对象变量作为常量传递&

C++ 将对象变量作为常量传递&,c++,constants,C++,Constants,我有一个函数,看起来像 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);

我有一个函数,看起来像

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\u t bigint::do\u bigaddconst bigvalue\u t&',const bigvalue\u t&'的'this'参数传递会丢弃限定符[-fppermissive]

我知道怎么了,但我想不出一个办法来处理它。当它是指针时,如何将“this”设置为const bigint?

您的问题是do_bigadd不是const,而是operator+中的const,因此您试图调用const对象的非const成员函数。您需要设置do_bigadd常量:


如果这反过来导致do_bigadd中出现任何问题,您必须解决这些问题。但是,基于您将两个操作数都传递给do_bigadd的事实,我想知道您最初是否打算将其作为静态函数或非成员函数。

您说您有一个函数:

bigvalue_t do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {

}
事实并非如此。您有一个成员函数:

bigvalue_t do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {

}
您需要使该功能:

自由非成员函数 静态函数 在Jason C的答案中标记为const
如何使其成为自由函数?它们是我的教授提供的来源,我不打算改变它们,他告诉我们在课堂的私人部分增加这个功能bigint@user3345589如果它在类中,它会自动成为非静态或静态成员函数,但根据定义,它不能是自由函数。如果想要自由函数,请将其移出类。事实上,函数不必与类本身有任何关系,因此它不应该是它的一部分。@Frey这就是我所想的,这个函数甚至不应该在bigint的私有函数中,因为它与它无关。教授告诉我们要添加的函数不是自己编译的,我认为这是教授试图欺骗我们学习的方式?我是C++新手,我不知道函数函数后面的函数是什么,你能详细说明吗?@ USSR3545。89const只能被添加到成员函数中,而不是函数。请参阅。是否不允许将常量对象的数据传递给非常量成员函数?我很困惑,为什么我不能只传递'this'的big_值,而不在do_bigadd中将'this'声明为const。@user3345589不,这是因为您实际上已将do_bigadd声明为成员函数,看起来您是内联完成的。您不会在上下文中显示这一点,但这就是错误消息的含义。所以有了bigint::do_bigadd,而不是const。然后是bigint::operator+,它是常量。因此,在运算符+的上下文中,这也是常量,因为运算符+本身是常量。然后你基本上把它叫做->do_bigadd…,但是你不能,因为这在上下文中是常量,而do_bigadd不是。它实际上与参数类型无关。
bigvalue_t bigint::do_bigadd (const bigvalue_t& left, const bigvalue_t& right) {

}