6

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.

asked Feb 20, 2014 at 14:06

1 Answer 1

3

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.

answered Feb 20, 2014 at 18:41
2
  • 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. Commented Feb 20, 2014 at 22:00
  • 2
    Indeed, they are trying to fix this in 1.5 github.com/arduino/Arduino/pull/1726 Commented Feb 21, 2014 at 12:43

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.