I have a simple library which uses another library.
Here is the header:
#ifndef __DERIVEDCLASS_H__
#define __DERIVEDCLASS_H__
#include <HardwareSerial.h>
class DerivedClass
{
private:
HardwareSerial* serial;
public:
DerivedClass();
};
#endif
And the CPP:
#include "DerivedClass.h"
DerivedClass::DerivedClass()
{
}
And the sketch:
#include <DerivedClass.h>
void setup()
{
}
void loop()
{
}
This works fine.
However, if I change the library header to this:
#ifndef __DERIVEDCLASS_H__
#define __DERIVEDCLASS_H__
#include <SoftwareSerial.h>
class DerivedClass
{
private:
SoftwareSerial* serial;
public:
DerivedClass();
};
#endif
The sketch fails to compile:
/Users/andrew/Documents/Arduino/libraries/DerivedClass/DerivedClass.h:9: error: ISO C++ forbids declaration of 'SoftwareSerial' with no type /Users/andrew/Documents/Arduino/libraries/DerivedClass/DerivedClass.h:9: error: expected ';' before '*' token
If I change the sketch to:
#include <DerivedClass.h>
#include <SoftwareSerial.h>
void setup()
{
}
void loop()
{
}
i.e. including the SoftwareSerial library in the top level sketch, it compiles fine.
If I expand the library out so it actually performs actions, then if it compiles, it works.
Why is this? HardwareSerial is a built-in part of the Arduino, located in hardware/arduino/cores/arduino and SoftwareSerial is in libraries, but why would the build process differentiate between the two.