有人能说出为什么我在编译这个类时会遇到这个错误吗?
class C
{
public:
void func(const C &obj)
{
//body
}
private:
int x;
};
void func2(const C &obj)
{
obj.func(obj);
}
int main() { /*no code here yet*/}
答案 0 :(得分:11)
C :: func()方法不承诺它不会修改对象,它只承诺它不会修改它的参数。修正:
void func(const C &obj) const
{
// don't change any this members or the compiler complains
}
或者使其成为静态功能。当C对象作为参数时,它确实听起来应该是这样。
答案 1 :(得分:2)
您需要将C::func(const C &obj)
标记为const,因为您正在从const对象调用它。正确的签名如下所示:
void func(const C& obj) const
答案 2 :(得分:1)
问题是在func2()
中你使用const对象调用非const函数(C::func()
)。
将C::func()
的签名更改为:
void func(const C &obj) const
{
// whatever...
}
这样就可以用const对象调用它。
答案 3 :(得分:1)
由于:
this
是指向当前obj的 const 指针。
因此,您可以将func设为const:
class C
{
public:
void func(const C &obj) const
{
//body
}
private:
int x;
};
void func2(const C &obj)
{
obj.func(obj);
}
int main() {
return 0;
}
OR
你可以删除 this 指针的常量,如下所示:
class C
{
public:
void func(const C &obj)
{
//body
}
private:
int x;
};
void func2(const C &obj)
{
(const_cast<C &>(obj)).func(obj);
}
int main() {
return 0;
}
希望有所帮助。