Error al compilar "No nombra un tipo"

2

Quiero heredar mi propia clase de LiquidCrystal que crea algunos caracteres personalizados durante la inicialización. Aquí está el código que he escrito hasta ahora:

MyProject.ino

#include <LiquidCrystal.h>
#include "MyLiquidCrystal.h"

MyLiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
 lcd.begin(16, 2);
 lcd.setCursor(0,0);
 lcd.print("Welcome");
}

void loop()
{
}

MyLiquidCrystal.h

#include <LiquidCrystal.h>
#include <Arduino.h>

namespace MyProject
{
    class MyLiquidCrystal: public LiquidCrystal
    {
        private:               
            void createCustomChars()
            {
                byte smiley[8] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000 };                    
                this.createChar(0, smiley);
            }

        public:
            MyLiquidCrystal(uint8_t rs,  uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) 
                : LiquidCrystal(rs, enable, d0, d1, d2, d3)
            {
                createCustomChars();
            }
    };
};

Recibo el siguiente error en la línea MyLiquidCrystal lcd(8, 9, 4, 5, 6, 7); :

MyProject:5: error: 'MyLiquidCrystal' does not name a type

He estado buscando en Google por un tiempo, pero no pude averiguar qué está pasando. Cualquier ayuda sería apreciada!

    
pregunta papaiatis

2 respuestas

1

Intente eliminar namespace MyProject del archivo de encabezado. Eso no es obligatorio y significa que no se encuentra la clase ubicada fuera del espacio de nombres. Alternativamente, puede usar el nuevo prefijo de espacio de nombres en su proyecto principal como sugiere otra respuesta.

    
respondido por el PeterJ
6

Dado que su clase MyLiquidCrystal se declara dentro de un espacio de nombres ( MyProject ), debe usar el nombre de tipo completo para usarlo fuera de ese espacio de nombres. En su caso, debe reemplazar:

MyLiquidCrystal lcd(8, 9, 4, 5, 6, 7);

por

MyProject::MyLiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Como alternativa, puede agregar la siguiente línea en la parte superior de su boceto:

using namespace MyProject;

Esto le dirá al compilador que todo el contenido del espacio de nombres MyProject debe importarse al espacio de nombres global, lo que permitirá el acceso directo a su contenido.

    
respondido por el abey

Lea otras preguntas en las etiquetas