Ich habe eine einfache Bibliothek, die eine andere Bibliothek verwendet.
Hier ist der Header:
#ifndef __DERIVEDCLASS_H __ # define __DERIVEDCLASS_H __ # include <HardwareSerial.h>class DerivedClass {private: HardwareSerial * serial; public:); endif
Und der CPP:
#include "DerivedClass.h" DerivedClass :: DerivedClass () {}
Und die Skizze:
#include <DerivedClass.h>void setup () {} void loop () {}
Dies funktioniert einwandfrei.
Wenn ich jedoch den Bibliotheksheader in Folgendes ändere:
#ifndef __DERIVEDCLASS_H __ # define __DERIVEDCLASS_H __ # include <SoftwareSerial.h>class DerivedClass {private: SoftwareSerial * class; public: public; }; # endif
Die Skizze kann nicht kompiliert werden:
/Users/andrew/Documents/Arduino/libraries/DerivedClass/DerivedClass.h:9: Fehler: ISO C ++ verbietet die Deklaration von 'SoftwareSerial' ohne Typ / Users / andrew / Documents / Arduino / library / DerivedClas s / DerivedClass.h: 9: Fehler: erwartet ';' vor '*' Token
Wenn ich die Skizze in Folgendes ändere:
#include <DerivedClass.h> # include <SoftwareSerial.h>void setup () {} void loop () {}
dh Wenn Sie die SoftwareSerial-Bibliothek in die Skizze der obersten Ebene aufnehmen, wird sie problemlos kompiliert.
Wenn ich die Bibliothek so erweitere, dass sie tatsächlich Aktionen ausführt, funktioniert sie, wenn sie kompiliert wird.
Warum ist Dies? HardwareSerial ist ein integrierter Teil des Arduino, der sich in hardware / arduino / cores / arduino befindet, und SoftwareSerial befindet sich in Bibliotheken , aber warum sollte der Erstellungsprozess zwischen beiden unterscheiden? .