[SOLUCIONADO] Objeto como parámetro de una función

Hola! Estoy algo (bastante) oxidado en el tema C++ y por más que busco por foros no doy con la solución. Tengo unos objetos WifiUDP que quiero pasar como parámetro de otras funciones. El código que tengo resumiendo es el siguiente:

#include <Wifi.h>
#include <WifiUDP.h>

WiFiUDP UDPEnvio;

String ReadUDP(class WifiUDP & miUDP)
{
miUDP.beginPacket(ipDestino, puertoDestino);
[...]
}

ReadUDP(UDPEnvio);

La declaración String ReadUDP(class WifiUDP & miUDP) la hago de ese modo porque lo he visto por el foro en inglés pero luego no puedo (o no sé) acceder a los métodos de miUDP dentro de la función ni tampoco sé como invocarla porque según lo estoy haciendo también me da error.

¿Cómo sería la forma correcta?

Hablo desde la casi ignorancia...

No será parámetro por referencia, o sea, &miUDP ?

String ReadUDP(class WifiUDP &miUDP)

Saludos

gatul:
No será parámetro por referencia, o sea, &miUDP ?

String ReadUDP(class WifiUDP &miUDP)

¿Pero eso no es igual que como yo lo tengo?

No, vos tenes un espacio entre & y miUDP, como si fuese una operación AND entre bits.
O sea "& miUDP" no es lo mismo que "&miUDP", claramente

Ah vale! disculpa, no me había fijado. Está sin espacio entre &UDP, el error fue mío al escribir aquí el código. Si lo tengo así me da error al invocar la función error: parameter 1 of 'String ReadUDP(WifiUDP)' has incomplete type 'WifiUDP'Oo

Verificá lo que tipeaste porque tenes un error,

WiFiUDP UDPEnvio;

String ReadUDP(class WifiUDP &miUDP)

Fijate que WiFiUDP en la 1ra línea con F mayúscula y en la segunda está con minúscula.
Una de las dos está mal

Agrego: viendo el nombre de la librería me inclino porque debe ser f minúscula en lugar de mayúscula.
Edito: el nombre de la librería está mal tipeado.

@TonyDiana
Si lo declaro como dicen los manuales, que fue lo primer que hice, me da este error en la declaración de la función:
'WifiUDP' was not declared in this scope
lo mismo que comentan aquí https://forum.arduino.cc/index.php?topic=133037.0 , por eso cambie la declaración escribiendo el parámetro como class WifiUDP &miUDP.
También he sacado las definiciones a ficheros .hpp como dicen en ese hilo pero nada, no soy capaz. Terminaré haciendo una función específica para cada uno de los objetos...
Gracias!!

el & después del tipo, no al lado del nombre de la variable/objeto

Ando muy atareado por eso casi no vengo al foro, pero en c++ la forma de un puntero correcta es esa,

Si no te funciona por referencia haz un puntero total

y si no a ver si me libero y e echo una mano, pero ya te digo, algo liado con el trabajo

@kekoha Revisaste lo que te dije en #5?
Tenes un error de tipeo, no se si lo cometiste al transcribir acá el código o ya lo tienes en el mismo. Revisa porque el lenguaje es sensible a mayúsculas entonces WiFiUDP no es lo mismo que WifiUDP y casualmente el error te dice que WifiUDP no está declarado.

Gracias @TonyDiana, yo sabía que podía estar confundido con donde iba el & en este caso. :disappointed_relieved:

Prueba un puntero puro *, ya te digo, me ha picado la curiosidad, en Python es super simple pero en C++ no me ha echo falta nunca, ya que uso poco este lenguaje, apenas pueda pruebo yo también

Vale, ahora pinta mejor, me estaba volviendo loco el intellisense del Visual Studio Code, me marcaba error pero sí compila si declaro la función así:

String ReadUDP(class WifiUDP& miUDP)

Pero luego para invocarla:

WifiUDP UDPPantalla;

ReadUDP(UDPPantalla);

Me da error en la función: error: invalid initialization of reference of type 'WifiUDP&' from expression of type 'WiFiUDP'. He probado a pasar el parámetro con & pero tampoco, estoy probando un poco a bulto porque la verdad que no comprendo muy bien el por qué.

EDITO: gracias, mañana probaré haciéndolo con un puntero puro.

Probaste definir el parámetro sin & ?

Me sigue llamando la atención que el error siga haciendo referencia a WiFiUDP (con F mayúscula). :o

Bueno, mañana nos cuentas. Saludos

Porque habla de tipo o sea tal vez sea una estructura WiFIUDP

Si, ya se, intenté ser sutil para no repetirle por tercera vez que revise los errores de tipeo.

La librería se llama WiFiUdp, no WifiUDP, imagino que trabaja con Windows porque si fuese Linux ya no pasaría del #include.

La clase es WiFiUDP (con F mayúscula), no WifiUDP (con f minúscula).

Veamos si "la tercera es la vencida"...

Solucionado!! Muchas gracias a @gatul, @TonyDiana y @surbyte.

Al final era un cúmulo de errores de novato... :disappointed_relieved:

Inicialmente el código estaba bien pero no compilaba porque me pasaba lo que dicen en (https://forum.arduino.cc/index.php?topic=133037.0) que no tenía las funciones en un .h y por ir probando y cambiando cosas a lo loco, en una de estas escribí el parámetro como class WifiUDP (con la f minúscula como decía gatul y al añadirle class delante compilaba pero lógicamente era una clase diferente). Inicialmente estaba copiado de la instanciación del objeto y ahí si funcionaba porque el programa funcionaba correctamente. Entre eso y que luego me lie con los &, los * y que vengo de lenguajes que no son "case sensitive"...

Excelente!

Saludos

Sigo grabando los vídeo, si el problema es el redondeo, hicimos una rutina que mejoraba el redondeo, aunque @gatul propuso una versión mejorada de la mía, no llegue a entenderla ni dedicarle más, podríamos mejorarla ¿te parece @gatul?

Supongo que el fin de semana domingo noche habré acabado, o lunes en la mañana, si os parece puedo hacer un programa de ejemplo para dejarlo en la sección de documentación, si lo veis interesante, sobre cómo pasar objetos a una función, en sus diferentes versiones y sabores posibles

No sé qué os parece la idea, pero sería la semana entrante

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.