Errores, fallos, preguntas - página 2721

 
Koldun Zloy:

No tiene sentido. Si no vas a cambiarlo, no significa que tengas que hacer const. Basta con que la variable sea privada.

Sería lógico que sacaras algo en claro, pero sólo te has creado un problema.

const es un control adicional. De lo contrario, no sería necesario introducir esta directiva en el lenguaje.


Lo bueno de un campo const público es que es accesible a la lectura (se puede pasar por referencia). Pero cambiarla por error está descartado.


const me ayuda mucho a la hora de escribir programas. Es la primera vez que surge un problema.


También ayuda usar esto y :: donde no se pueden escribir.

 
fxsaber:

const es un control adicional. De lo contrario, podríamos haber evitado la introducción de esta directiva en el lenguaje.


Un campo const público es bueno en el sentido de que se puede leer (se puede pasar por referencia). Pero cambiarla por error está descartado.


const me ayuda mucho a la hora de escribir programas. Es la primera vez que surge un problema.


HH También ayuda a utilizar esto y :: donde no se pueden escribir.

Haz que la variable sea privada. Utilice una función para la lectura. No es necesario pasar const int por referencia.

 
Koldun Zloy:

Haz que la variable sea privada. No es necesario pasar const int por referencia.

Usted propone simplemente ignorar la const.

 
fxsaber:

Está sugiriendo que la const es simplemente ignorada.

No. Pero no es necesario en este caso particular.

 
Hombre, te inventas un problema de la nada. "Los ratones lloraban y lloraban pero seguían mordiendo el cactus".
 
fxsaber:

Experimenté, en general cualquier solución será "defectuosa" no importa cómo se mire

Si hablamos de velocidad de ejecución y de controlar el acceso al campo de la estructura, puedes escribir una solución fea, pero que resolverá el problema

Yo renunciaría a los métodos estáticos en la estructura por completo - no tienen sentido, el código seguirá siendo confuso y poco lógico

se ve así:

int tmp[] = {1,2,3,99};
struct A
{
private:
   static int count;
public:
   const int a;
   A():a(tmp[count++]) {}
};
static int A::count = 0;
//+------------------------------------------------------------------+
void OnStart()
{
   A a[ArraySize(tmp)];
   for(int i=0;i<ArraySize(a);i++) Print(a[i].a);
}


....da y el contador de cuentas tampoco es necesario, de hecho, es necesario envolver A[ArraySize(tmp)]; en una macro sustitución que creará un array de estructuras y borrará un array temporal tmp

 

Hay dos programas trabajando en el mismo archivo al mismo tiempo. El que escribe utiliza las banderasFILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ. El que lee - FILE_READ|FILE_BIN|FILE_SHARE_WRITE|FILE_SHARE_READ. Aunque el primer programa guarda periódicamente el archivo usando FileFlush, el segundo programa sólo ve la longitud del archivo cuando se abre. He intentado hacer FileSeek de ida y vuelta - no ayuda.

Pregunta: ¿cómo hago para que el programa que lee el archivo recoja los datos a sobrescribir?

 

Lo resumiré:

struct A {
    const int a; 
    A() {}
};
void OnStart()
{
            A a1; //(1) нормально
    const int a2; //(2) Error: 'a2' - 'const' variable must be initialized
}

¿Cuál es la diferencia entre el 1 y el 2?

 
A100:

Lo resumiré:

¿Cuál es la diferencia entre 1 y 2?

Esperaba que hubiera algún mecanismo incorporado para inicializar este caso, pero no hay nada.

struct A {
    const int a[10]; 
    A() {ArrayPrint(a);} //-396985669       32758 -1490812928       32757  2147360768           0 -1681390008         493           0           0

};
//+------------------------------------------------------------------+
void OnStart()
{
  A a1;
}
//+------------------------------------------------------------------+

ZS: aquí es donde el compilador ve

void f()
{
   const int x;  //'x' - 'const' variable must be initialized
}
 
Igor Makanu:

Esperaba que hubiera algún mecanismo incorporado para inicializar este caso, pero no hay nada.

ZS: aquí el compilador ve

En principio, no debería darse este caso: la cuestión debería haberse resuelto ya a nivel del compilador (como en C++). Y aquí es algo posible y como consecuencia, una discusión de varias páginas