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.

¿Error de variable no declarada en el ámbito de C++?

Soy un traductor de español que traduce documentos de IT. Traduzca lo siguiente al español. No traduzca el código ni el resultado en formato Markdown.

¡Soy un novato en c++! Estoy tratando de iterar sobre enteros utilizando el bucle for, pero obtengo el siguiente error:

               error: ‘frame’ was not declared in this scope
               auto position_array = (*frame)[i][j];

Pero como puede ver en el siguiente código, está declarado:
“`c++
auto ds = data<em>file.open</em>dataset(argv[1]);
// auto frame = data<em>file.read</em>frame(ds, 0); // dentro del bucle
for (int i = 0; i < 3; ++i)
auto frame = data<em>file.read</em>frame(ds, i);</p>

<pre><code>for (size_t i = 0; i < nsamples; ++i) {
for (size_t j = 0; j <= 2; ++j) { // j<=2 asigna todas las columnas
auto position_array = (*frame)[i][j];
}
corr.sample(frame);
}
corr.finalise();
</code></pre>

“`
Funciona bien si uso la segunda línea comentada. Pero ahora quiero iterar sobre la segunda variable de datafile.readframe(ds, i) ¡y aparece el error! ¿Qué estoy haciendo mal? ¿Necesito declarar int frame = 0;antes del bucle for? ¡Por motivos de brevedad, solo publico el código con el error, en caso de que alguien necesite ver todo el código, son bienvenidos!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí se encuentra con el ámbito de la variable frame. En la implementación actual, frame se declara dentro del bucle y es local al cuerpo del bucle. Por lo tanto, no puede accederse fuera del bucle y, por lo tanto, se muestra el mensaje de error.

    Para solucionar esto, necesita declarar frame fuera del bucle para que sea accesible fuera del bucle. Puede inicializar frame como nullptr o cualquier otro valor predeterminado antes de que comience el bucle. Aquí hay un ejemplo:

    c++
    auto ds = data_file.open_dataset(argv[1]);
    Frame* frame = nullptr; // Declare frame outside the loop
    for (int i = 0; i < 3; ++i) {
    frame = data_file.read_frame(ds, i); // Assign value to frame inside the loop
    for (size_t j = 0; j <= 2; ++j) {
    auto position_array = (*frame)[i][j];
    // Rest of the code
    }
    }

    De esta manera, frame es accesible fuera del bucle y también puede usarse en el bucle interno. Tenga en cuenta que ya no necesita la línea comentada // auto frame = data_file.read_frame(ds, 0); que no causaba problemas ya que se declaraba en el mismo ámbito.

Comments are closed.