通过常量引用过来的对象不能调用成元函数.否则会出现类似:'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;
}