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.
1 Answer 1
If I remember correctly this is in fact a limitation of the Arduino IDE.
If you use a better IDE (personally I use Eclipse with the Arduino plugin) it works as it should, i.e. if you include a library A that includes another library B, then in the end you won't get compile-time errors and both B and A will be included in the final binary.
-
Absolutely right. Just tried Stino and it works fine. I might retreat back to using command line. I can't understand why they would do this.Cybergibbons– Cybergibbons2014年02月20日 22:00:42 +00:00Commented Feb 20, 2014 at 22:00
-
2Indeed, they are trying to fix this in 1.5 github.com/arduino/Arduino/pull/1726Cybergibbons– Cybergibbons2014年02月21日 12:43:06 +00:00Commented Feb 21, 2014 at 12:43