通过常量引用过来的对象不能调用成元函数.否则会出现类似:'function' : number overloads have no legal conversions for 'this' pointer的错误,
除了删掉参数中的const外,还有什么解决办法吗?
代码:
#include "stdafx.h"
#include
class X {
int i;
public:
X();
int x();
void x(int x);
};
X::X()
{
i = 1;
}
int X::x()
{
return i;
}
void X::x(int x)
{
i = x;
}
X f()
{
return X();
}
void g1(X& x)
{
// cout << " non-const reference:" << x.x() << endl;
}
void g2(const X& x)
{
// cout << " const reference:" << ends << "get x.i:" << x.x() << endl;
// int temp =3;
// cout << "set x.i:" << temp << endl;
// x.x(temp);
// cout << "get x.i:" << x.x() << endl;
}
int main(int argc, char* argv[])
{
g1(f());
g2(f());
return 0;
} 将成元函数改成const的然后调用:
#include "stdafx.h"
#include
class X {
int i;
public:
X(); int x()
const ;
void x(int x);
};
X::X()
{
i = 1;
}
int X::x()
const
{
return i;
}
void X::x(int x)
{
i = x;
}
X f()
{
return X();
}
void g1(X& x)
{
cout << " non-const reference:" << x.x() << endl;
}
void g2(const X& x)
{
cout << " const reference:" << ends << "get x.i:" << x.x() << endl;
// int temp =3;
// cout << "set x.i:" << temp << endl;
// x.x(temp);
// cout << "get x.i:" << x.x() << endl;
}
int main(int argc, char* argv[])
{
g1(f());
g2(f());
return 0;
}
注:如果声明一个成员函数为const函数,则等于告诉编译器可以为一个const对象调用这个函数。非const对象也可以调用这个函数,为保证函数的常量性,在函数定义中,如果我们改变对象中的任何成员或调用任何非const成元函数,编译器都会报错 即改为如下是不对的: #include "stdafx.h" #include <iostream.h> class X { int i; public: X(); int x() const; void x(int x) const ; };
X::X() { i = 1; }
int X::x() const { return i; } void X::x(int x) const { i = x; } X f() { return X(); }
void g1(X& x) { cout << " non-const reference:" << x.x() << endl; }
void g2(const X& x) { cout << " const reference:" << ends << "get x.i:" << x.x() << endl; int temp =3; cout << "set x.i:" << temp << endl; // x.x(temp); cout << "get x.i:" << x.x() << endl; }
int main(int argc, char* argv[]) { g1(f()); g2(f());
return 0; }
|