ok, that's weird. it looks so redundant
Yes, and no. It simplifies the build process, for one thing. For another, it prevents you from using a library that uses a library that uses a library that (tries to) use a library that you don't have.
Declare up front that your sketch will need library A, B, C, and D. No need to chase after libraries. All required libraries are defined up front.
to my menuLCD.cpp file, just after the constructor declaration (see the code posted above). when trying to compile, it says that "lcd was not declared in this scope" (on the line lcd.clear()smiley-wink. then i thought "that's ok, it's because the "lcd" is declared into the constructor, allowing me only to use it as long as my constructor is running". so i put the "LiquidCrystal lcd;" in the .h file, among the other variables declarations, but then the compiler says : 'LiquidCrystal' does not name a type.
You do need to move the declaration and initialization of the instance out of the constructor. As you have discovered, a local variable in the constructor is of no use to the rest of the class.
You need to add a line to the header file that says that lcd is an instance of the LiquidCrystal class. The, it needs to be instanced/valued at the same time as the constructor of your class is called:
MenuLCD::MenuLCD(byte rs, byte enable, byte d4, byte d5, byte d6, byte d7, String intro, MenuItem _menu), lcd(rs, enable, d4, d5, d6, d7)