首页 > 解决方案 > 为什么此代码显示第 1 行所需的错误左值?如何解决?

问题描述

#include<iostream> 
using namespace std; 

class Test 
{ 
  private: 
  int x; 
  public: 
  Test(int x = 0) { this->x = x; } 
  void change(Test *t)
  { 
    this = t; //line 1 
  } 
  void print() { cout << "x = " << x << endl; } 
}; 

int main() 
{ 
  Test obj(5); 
  Test *ptr = new Test (10); 
  obj.change(ptr); 
  obj.print(); 
  return 0; 
} 

因为我们知道这个指针持有调用对象的引用。在第 1 行中,我试图更改调用对象的引用,但它显示错误“需要左值”。有人可以解释一下吗?

标签: c++ooppointersthis

解决方案


您不能将指针分配给this指针,因为它是prvalue

this指针是一个常量指针,保存当前对象的内存地址。因此,在您的情况下this是类型const Test*,因此无法分配给它。这样做(如果允许的话)将有效地允许对象更改其在内存中的地址,正如@Peter 提到的那样。

注意:const Test*是一个指向常量对象的指针。它指向的对象是常量,而不是指针本身。

PS:this->x = t->x;大概就是你想说的。


推荐阅读