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.

¿Por qué esta función no imprime correctamente las coordenadas?

Como dije en el título, tengo un problema al intentar imprimir valores de coordenadas de esta manera mientras uso un std::thread.

#include <iostream>

#include <array>

#include <thread>

struct Vec2
{
int x;
int y;
};

void dostuff2(Vec2 x)
{
std::cout << x.x << x.y << " ";
}

void dostuff(Vec2 Oven[3])
{
for (int i=0; i<3; ++i)
{
dostuff2(Oven[i]);
}
}

int main()
{
Vec2 Oven[3]{ {63,21},{63,22},{63,23} };
std::thread thread_obj(dostuff,std::ref(Oven));
thread_obj.detach();
}

¿Alguna idea de por qué este código no funciona? Funcionaba sin ejecutar la función en un hilo separado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El principal problema con este código es que la función dostuff espera un arreglo de objetos Vec2, pero en cambio le estamos pasando un solo objeto Vec2 envuelto en una referencia. Esto se debe a que std::thread requiere que pasemos argumentos por valor o por referencia, y no podemos pasar un arreglo por valor directamente.

    Para solucionar este problema, podemos modificar dostuff para que tome una referencia a un arreglo de objetos Vec2, de la siguiente manera:

    c++
    void dostuff(Vec2 (&Oven)[3])
    {
    for (int i = 0; i < 3; ++i)
    {
    dostuff2(Oven[i]);
    }
    }

    Aquí, estamos utilizando una referencia a un arreglo de objetos Vec2 como argumento, lo que nos permite pasar todo el arreglo a la función. Ten en cuenta que necesitamos incluir el tamaño del arreglo (3) en el tipo de referencia, de lo contrario obtendremos un error de compilación.

    Con esta modificación, el código debería funcionar como se espera.

Comments are closed.