void MyToolBox::begin(Print &print){
printer = &print; //operate on the address of print
}
The begin() method should be defined to take a pointer, not a reference. It should be up to the user to pass it the right thing.
I was going to try to compile your code, but it uses way too many libraries that I don't have. You need to create a simple sketch that illustrates the problem. Clearly, the problem has nothing to do with servos, thermometers, LCD shields, etc. So get rid of that stuff.
The MyToolBox class does not need to know anything about the BatteryBox class. So, get rid of the #include statements for BatteryBox.h in both the source and header files for MyToolBox.
I put the MyToolBox header and source files in a folder called ToolAndBatteryBox in my Arduino\libraries folder. I changed BatteryBox.h to use quotes around the file name, rather than angle brackets, when including MyToolBox.h.
I used quotes in the sketch, too, for both files. When I compile, now, I get:
Binary sketch size: 1,882 bytes (of a 30,720 byte maximum)