Errores, fallos, preguntas - página 3095

 

Hay un guión

class X {};

void fTest(X &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //ОК
//fTest(&obj);         //Compile error: '&' - parameter passed as reference, variable expected   
  }

Pregunta: si GetPointer(obj) se pasa bien, ¿por qué &obj falla?

¿Es necesario para algo?

 

Quiero aclarar, por si acaso. Supongamos que hay un código como éste:

ClassX *x=new ClassX;

//какой-то код

delete x;

//......много кода, прошло много времени

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
¿Es posible en principio que x sea igual a y?
 
mktr8591 #:

Quiero aclarar, por si acaso. Supongamos que existe tal código:

¿Es posible en principio que x sea igual a y?

En teoría, sí. Anteriormente, la desinstalación del puntero mostraba un contador (se podía ver el número de todos los objetos). Ahora es aleatorio.

 
fxsaber #:

En teoría, sí. Anteriormente, la impresión del puntero mostraba un contador (se podía ver el número de todos los objetos). Ahora es aleatorio.

Tal vez, pero es un poco pequeño para el azar - por lo general tengo siete dígitos.
 
mktr8591 # :

Hay un guión

Pregunta: si GetPointer (obj) se pasa bien, ¿por qué falla &obj?

¿Es necesario para algo?

Aquí no es necesario utilizar GetPointer ().

   fTest(obj);                       //ОК

 // Это для чего-то нужно? 
   X *objptr;
   objptr = &obj;  
 
Alain Verleyen #:

Aquí no es necesario un GetPointer ().

De acuerdo. Sólo me pregunto por qué hay tanta diferencia de comportamiento.
 
mktr8591 #:

Quiero aclarar, por si acaso. Supongamos que existe tal código:

¿Es posible en principio que x sea igual a y?

No, imposible.

 
mktr8591 #:

Quiero aclarar, por si acaso. Supongamos que tenemos el siguiente código:

¿Es posible en principio que x sea igual a y?


Te recomiendo que no utilices un puntero autorrangable a una referencia y lo hagas explícitamente, como se muestra en el código siguiente (resaltado en rojo):

class A
  {
  };

void func(A &)
  {
  }

void OnStart(void)
  {
   A a;   
   A *pa=&a;

   func(* pa);
  }
 
Ilyas # :


Te recomiendo que no autorices el puntero en un enlace y lo hagas explícitamente como se muestra en el código de abajo (resaltado en rojo):

¿Qué ha cambiado? ¿No es lo mismo después de todo?
 

No hay duda del error, pero por alguna razón está atrasado.

class X {};

template <typename T>
void fTest(T &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //'GetPointer' - parameter passed as reference, variable expected - ДВАЖДЫ!
  }