Создание своей библиотеки.

Тема в разделе "Arduino & Shields", создана пользователем Zaic, 17 сен 2013.

  1. Zaic

    Zaic Нерд

    Всем привет!
    Подскажите, как правильно создавать свою библиотеку.
    При подключении своей библиотеки валятся ошибки.
    Вот все что написал:
    gms.h:

    #ifndef gms_h
    #define gms_h
    #include "Arduino.h"

    class gms
    {
    public:
    gms(int pordDate, int portClock, int portLat);
    private:
    int _portDate;
    int _pirtClock;
    int _portLat;
    char _dm633[24];
    boolean portReg[16];
    }
    #endif
    //---------------------------------------------
    gms.cpp

    #ifndef gms_h
    #define gms_h
    #include "Arduino.h"
    class gms
    {
    public:
    gms(int pordDate, int portClock, int portLat);

    private:
    int _portDate;
    int _pirtClock;
    int _portLat;
    char _dm633[24];
    boolean portReg[16];
    }
    #endif
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Не заметил отличий .h от .cpp
    В хидере должно сидеть описание класса, а в сишнике - реализация.
    А у Вас фактически получилось 2 хидера и ни в одном из них нет реализации функций, объявленных в классе.
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Для примера посмотрите крохотную библиотеку EEPROM.
    EEPROM.cpp:
    Код (C):
    #include <avr/eeprom.h>
    #include "Arduino.h"
    #include "EEPROM.h"
    // реализация метода, объявленного в хидере
    uint8_t EEPROMClass::read(int address)
    {
        return eeprom_read_byte((unsigned char *) address);
    }

    // реализация метода, объявленного в хидере
    void EEPROMClass::write(int address, uint8_t value)
    {
        eeprom_write_byte((unsigned char *) address, value);
    }

    EEPROMClass EEPROM;

    EEPROM.h:
    Код (C):
    #ifndef EEPROM_h
    #define EEPROM_h
    #include <inttypes.h>

    // описание класса
    class EEPROMClass
    {
      public:
        // объявление методов
        uint8_t read(int);
        void write(int, uint8_t);
    };

    extern EEPROMClass EEPROM;
    #endif
     
     
  4. Zaic

    Zaic Нерд

    Извините, так торопился, что скопировал одно и то же.
    Вот cpp
    Код (C):
    #ifndef gms_cpp
    #define gms_cpp
    #include "Arduino.h"
    #include "gms.h"
     gms::gms(int pordDate, int portClock, int portLat)
     {
     }
    #endif
     
     
  5. Unixon

    Unixon Оракул Модератор

    class gms
    {
    ...
    }; // пропустили ";"
     
    nailxx нравится это.
  6. Zaic

    Zaic Нерд

    Unixon, большое спасибо.
    Заработало.:)
    Я бы еще долго пытался понять, почему ошибки валятся из другого файла.:confused:
    Вечная проблема, невнимательность.