Cryptic compiler errors
You mustn't terminate a #define with a ;.  Semicolons are for C and C++ statements. #define is a preprocessor statement. 

#define creates a literal string replacement, so when you use it you end up with:

const char keymap[5;][6;] = {...


which is, of course, wrong.