Duda comunicación entre clases y/o ficheros

Buenos días,

Estoy comenzando con el uso de clases y distintos archivos (.h y .cpp) y me generan una cuantas dudas. Estoy realizando una programación para entender el uso de estas y cómo se comunican. Pongo un ejemplo de lo que estoy trabajando para ser más claro.

Clases.ino

#include "CrearObjetos.h"

void setup() {
  CrearObjetos();
}

void loop() {
  
}

Lo único que hace es llamar a una función para crear objetos. No creo que sea la forma más correcta de crear objetos pero lo estoy haciendo así para entender la comunicación entre clases.

CrearObjetos.h

#include "Memoria.h"

void CrearObjetos() {
  Memoria memoria;
}

No quiero volver a crear ningún objeto Memoria. Solamente la creo aquí y a partir de ahora quiero hacer referencia a este objeto.

Memoria.h

#include <SoftwareSerial.h>

class Memoria {
  private:
    String _sd = "";

  public:
    void actualizarMemoria(String memoria);

};

Memoria.cpp

#include "Memoria.h"

void Memoria::actualizarMemoria(String memoria) {
  _sd = memoria;
}

Ahora que tengo creado el objeto me gustaría llamarlo desde otro fichero. Pongo un ejemplo:
Ejemplo.h

void comunicacionFicheros() {
  //Aquí intento ejecutar la función actualizarMemoria(String) del objeto memoria creado anteriormente
}

Ya sé que no he referenciado en ningún sitio ejemplo.h, lo que me gustaría es saber como puedo utilizar la función actualizarMemoria() y que modifique la variable _sd de ese objeto en concreto.

Ejemplo2.h

#include "Memoria.h"

Memoria memoria; //ERROR

void comunicacionFicheros() {
  memoria.actualizarMemoria("gracias por la ayuda") ;
}

El Ejemplo2.h me daría error ya que estaría creando otro objeto Memoria memoria. Podría crear un objeto Memoria mem pero es otro objeto, y yo al que quiero acceder es a memoria, no a mem.

He estado leyendo por algunos foros el uso de punteros o del extern pero no he sido capaz de llegar a comunicarlos.

Un saludo y muchas gracias

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

Tu función instancia un objeto local y, por lo tanto, este se destruye al salir de la función.

Es hora de leer sobre scope.


Si quieres poder referenciar una variable en otros archivos además de en el archivo donde se crea, debes declarar la variable en el .h (de forma que los otros archivos que incluyan el .h conozcan el tipo de esta variable) y definirla en el .cpp.

➜ Aquí tienes un ejemplo en Wokwi con instancias compartidas y una definición de clase.

Muchas graciasm J-M-L Jackson,

Llevo desde ayer dándoles vueltas a tus palabras y me ha costado entenderlo. Me había obcecado en una forma de intentar hacerlo, y me costaba ver lo que me estabas diciendo. Tener el ejemplo me ha ayudado mucho.

Una última pregunta a raíz del ejemplo. Veo que está utilizando el #ifndef #define y #endif. ¿Exactamente para qué son? Estoy leyendo cosas, y cada vez me aclaro menos.

Un saludo y muchas gracias