es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La palabra clave ‘this’ utilizada en clases y objetos, ¿es un puntero constante?

Esta pregunta surgió en mi mente debido al siguiente error en mi programa en c++.


<h1>include <iostream></h1> <p>using namespace std; class Test { private: int x; public: Test(int x = 0) { this->x = x; } void change(Test *t) { this = t; } void print() { cout << "x = " << x << endl; } };</p> <p>int main() { Test obj(15); Test *ptr = new Test (100); obj.change(ptr); obj.print(); return 0; } <code> Error: </code> main.cpp:18:31: error: se requiere un lvalue como operando izquierdo de la asignación 18 | void change(Test *t) { this = t; } |<br>

Busqué sobre este error y encontré que generalmente ocurre cuando intentamos asignar constantes del lado izquierdo de los operadores de asignación a la variable del lado derecho.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, objetos, punteros y constantes de clase, puedo confirmar que el mensaje de error en este programa se debe a un intento de modificar el puntero this, el cual es un puntero constante y, por lo tanto, no se le puede asignar un nuevo valor.

    En la función change(), la línea this = t; está intentando asignar un nuevo valor al puntero this. Sin embargo, dado que this es un puntero constante, no se puede modificar de esta manera. En su lugar, debemos modificar el objeto al cual this está apuntando, desreferenciándolo y cambiando su valor de la siguiente manera:

    void change(Test *t) { *this = *t; }
    

    Esta línea desreferencia tanto this como t, lo cual devuelve los objetos a los que apuntan. Luego, podemos asignar el valor de *t al objeto apuntado por this.

    Realizar este cambio debería solucionar el error y permitir que el programa se ejecute correctamente.

Comments are closed.