Have to include wiring_private.h in all .h files? Rant time!

Hmmm. There does seem to be something odd here.
I set up a junk sketch with yair_send.h:

#ifndef yair_send_h
#define yair_send_h


	struct remoteSpecifics {
		unsigned int commandMark;
		unsigned int spaceZero;
		unsigned int spaceOne;
		unsigned int startMark;
		unsigned int startSpace;
		unsigned int stopSpace;
		unsigned int pulsesInCode;
		unsigned int tolerance;
		//String nameText;
	};

	struct infraredBit {
		unsigned int mark;
		unsigned int space;
	};
	
	 struct commandSwitch {
		byte * convertFrom;
		byte * convertTo;
		byte convertedBytes;
		byte outgoingRemote;
	};
#endif

and junk.ino:

#include "yair_send.h"
void setup()
{
}

void loop()
{
}

and it fails as the OP says. Strange that the code in my previous post works and this doesn't.

AHAhhhhhhhhhhhhhhhhhhhhhhhhhhhhh! Got it.

This has also caused me grief (I posted about it several weeks ago).

The preprocessor includes all sorts of stuff to support the sketch. The problem is that when it does this, it puts it just before the first "executable" statement in the code. In the example above it inserted it just before "void setup()" which means that the included files which define "byte" occur AFTER the include of yair_send.h. My previous example (without the include) must have worked because it treated the struct, which ends in a semicolon, as "executable".

The fix is to put a "char junk;" statement in front of your includes. E.G. my junk project compiles if it starts with:

char junk;
#include "yair_send.h"

I presume you could even put a junk struct at the front if you wished.

Pete