Objeto con error. Aprendiendo los ojetos con retornos de array

Hola.

Estoy aprendiendo a modulizar mi proyecto, y para ello creo objetos para reutilizar donde lo requiera.
Pero tengo uno que provoca un error que no localizo por más que he buscado.

Código reloj.h

// Librería del reloj
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>

class relojRTC{
  private:
   int  _hora;
   int  _minutos;   
   DateTime now;
   RTC_DS3231 rtc;
   // metodos privados  
   void guardaHora(); // Guardar fecha y hora en RTC.
   
  public:
    relojRTC();
    void fechaLee();  // Lee fecha a var now desde RTC
    void horaInc();   // incrementa 1 hora y guardaHora
    void horaDec();   
    void minutosInc();
    void minutosDec();
    // retornos
    int hora();       // Para control de alarma, retorna la hora.
    int minutos();    // Para control de alarma, retorna los minutos
    char[11] fecha(); // Retorna la fecha en formato DD/MM/AAAA
    char[9] horaStr(boolean segundos = false);  // Retorna hora en formato HH:MM si segundos es true: HH:MM:SS
    char[15] diaSemanaStr();  // Retorna dia de la semana en texto
  
}

No tengo claro si está bien construido el objeto.
En la útima linea da el error:

expected unqualified-id before '[' token

Si quito la última da en la siguiente y si quito todos los métodos que devuelven char[x]
da al principio como

class relojRTC{
new types may not be defined in a return type

el archivo cpp está vacío aún.

Hola,
No puedes hacer un tipo de retorno char[11], en lugar de eso debes retornar el puntero al array con

char* fecha();

Te aconsejo que leas algún tutorial sobre punteros en C. Hay algunas peculiaridades de los punteros a char que forman una cadena, la función fecha debe alojar el array y terminarlo con cero. O puedes pasarle el puntero al array que debe rellenar la función como parámetro.

Si no quieres complicarte la vida es mejor que uses String para tratar cadenas en Arduino, aunque usa más memoria, es más sencillo.
En ejemplo tienes una función que retorna una fecha por copia usando String.

// Librería del reloj
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>


class relojRTC{

    public:
       String fecha(){

           String sFecha;  
           int dia = random(1,32);
                  String f = String("2021-01-");

           if(dia<10)
             f += '0';
         f += String(dia);

         return f;
      }
};


relojRTC reloj;

void setup(){

  Serial.begin(9600);
  String fecha = reloj.fecha();
  Serial.println("Fecha:" + fecha);
}


void loop(){
}

Completamente de acuerdo, si quieres comenzar con objetos, empezar además con punteros es complicado, yo comenzaría por objetos simples que hagan cosas muy muy simples sin retornar nada, luego modifica el objeto y devuelve un binario (un número, un int por ejemplo) y luego cuando te sientas cómodo, pasas a los strings o los char.

PD: un puntero o un objeto es una herramienta, no un objetivo, salvo que quieras aprender a programar, en cuyo caso es un objetivo de aprendizaje, entonces primero aprende y luego usa, no queda de otra, es el camino que todos hemos andado antes.

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