我尝试使用类中的方法和this
指针将指针复制到另一个指针,如下所示。我给出了完整的测试代码,以便明确发生了什么。
class test {
private:
int x;
public:
void setx(int x);
int getx(void);
void copy(test *temp);
};
void test::setx(int x) {
this->x = x;
}
int test::getx(void) {
return this->x;
}
void test::copy(test *temp) {
this = temp;
}
我从main访问此方法如下:
int main() {
test a;
a.setx(4);
cout << a.getx()<<endl;
test *b = new test;
b->setx(4);
cout << b->getx()<<endl;
test *c;
c=b;
cout << c->getx()<<endl;
test *d;
d->copy(b);
cout << d->getx()<<endl;
}
但是它会出现以下错误
In member function ‘void test::copy(test*)’:
error: lvalue required as left operand of assignment
除了复制部分之外,涉及this
指针的所有其他方法都能正常工作。我在使用this
指针时遇到了一些基本错误吗?
答案 0 :(得分:7)
您无法覆盖this
。 this
指针是常量,因此不允许更改它。无论如何,这意味着什么?您无法更改您所在的对象。您可以更改该对象中的值,但不能更改对象本身。
您需要按值(通过存储在对象中的内容)复制其他对象,而不是通过指针。
此外,你不应该有一个名为copy
的函数;这就是复制构造函数和复制赋值运算符的用途。
答案 1 :(得分:2)
您无法修改this
指针。但是,您可以修改*this
:
void test::copy(test *temp)
{
*this = *temp;
}
此外,您应该重命名数据成员或参数,因此您不需要this->
:
class test
{
int m_x;
public:
void setx(int x)
{
m_x = x;
}
答案 2 :(得分:1)
test :: copy应该做什么? 显然,您无法为当前对象分配不同的地址。所以它无效。
如果这应该使用其他一些对象的值初始化当前对象,那么它应该如下所示:
void test::copy(test *temp) {
this->x = temp->getX();
}