Título: [Solucionado] std::thread error: invalid use of non-static member function Publicado por: MeCraniDOS en 18 Abril 2015, 19:59 pm Hola ;D,
Estoy teniendo problemas al crear un hilo :-[ Tengo el siguiente código (simplificado a la parte donde me da error) Atributos de la clase (Padre es una clase virtual) Código
En el constructor de la clase hago esto Código
Para acceder a sus métodos tengo que hacer esto: Código
Ahora lo que estoy intentando hacer es ejecutar ese metodo en un hilo Lo he intentado como hacen en este ejemplo pero me salta un error Ejemplo (funcion, argumentos) Código
Lo que he intentado, me da error en la primera línea Código error: invalid use of non-static member function A ver si me podeis ayudar.. :-\ Un saludo y gracias Título: Re: [?] std::thread error: invalid use of non-static member function Publicado por: Eternal Idol en 18 Abril 2015, 22:36 pm Hace el metodo estatico y en el parametro pasa el puntero al objeto.
https://foro.elhacker.net/programacion_cc/iquestcomo_accedo_a_this_desde_una_funcion_callback-t285522.0.html;msg1411745 Título: Re: [?] std::thread error: invalid use of non-static member function Publicado por: MeCraniDOS en 19 Abril 2015, 11:51 am Hace el metodo estatico y en el parametro pasa el puntero al objeto. Me da error cuando intento hacer el método estático, he entendido el problema pero no se como lo puedo solucionar, en la clase padre tengo esto Código
Y en las clases hijas hago esto Código
El error que me da es: Código error: member ‘moverHijo’ cannot be declared both virtual and static La estructura de clases es la siguiente (quizá me habia explicado un poco mal) Padre Código
Hijos (implementaciones del movimiento distintas) Código
Código
Donde se trabaja con las clases hijas Código
Lo que intento es ejecutar en un hilo, el método mover hijo Código
El error que me da al hacer esto es el del inicio del post.. Un saludo Título: Re: [?] std::thread error: invalid use of non-static member function Publicado por: ivancea96 en 19 Abril 2015, 14:57 pm Creo que sería mejor que creases una función intermedia que haga un padre.moverHijo(). Algo como:
Código
También tienes otra opción, y es crear otro método del estilo: Código
O como sea tu código. El tema es que no puede ser virtual y static a la vez, cada uno tiene su significado. Static es una función o variable de clase que están adheridas a la clase en sí, no a sus objetos. No puede ser virtual una función que es static, como ya viste. Título: Re: [?] std::thread error: invalid use of non-static member function Publicado por: MeCraniDOS en 19 Abril 2015, 16:37 pm Creo que sería mejor que creases una función intermedia que haga un padre.moverHijo(). Algo como: Código
También tienes otra opción, y es crear otro método del estilo: Código
Con tu primera función tendría que pasarle tambien Hijo&, sino no puedo acceder a padre. Prefiero utilizar la segunda opcion, me ha quedado de la siguiente manera: Código
Pero al crear el hilo me sigue dando error... :rolleyes: (Supongamos que solo he creado un hijo) Código
(Variables) Código
Error Citar ||=== Build: Debug in Padre (compiler: GNU GCC Compiler) ===| /usr/include/c++/4.9/functional||In instantiation of ‘struct std::_Bind_simple<int (*(Padre*, int))(Padre&, int)>’:| /usr/include/c++/4.9/thread|140|required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (&)(Padre&, int); _Args = {Padre*&, int&}]’| /home/**Ruta**/Casa.cpp|132|required from here| /usr/include/c++/4.9/functional|1665|error: no type named ‘type’ in ‘class std::result_of<int (*(Padre*, int))(Padre&, int)>’| /usr/include/c++/4.9/functional|1695|error: no type named ‘type’ in ‘class std::result_of<int (*(Padre*, int))(Padre&, int)>’| ||=== Build failed: 2 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===| :huh: :huh: |