Who wrote MyString.h and MyString.cpp ? and may I see that whole file please ?
When we want to try your sketch, we need the latest version of all the files that you use.
The keyword "String" is used for the String object: String() - Arduino Reference.
When you are using normal character arrays, then all of those functions already exist and they can be used in a normal way.
All those functions are here: avr-libc: <string.h>: Strings
The special PROGMEM functions are here: avr-libc: <avr/pgmspace.h>: Program Space Utilities
Are you sure that you have calculated the lastSTR properly ? Why strip the last element with "- 1" ?
You can start with something that works:
// about 6 strings of 8 bytes each fits in an array of 80 bytes.
char buff[80];
void function()
{
buff[0] = '\0'; // make empty string to start with
int n = sizeof(STR) / sizeof(char *);
for(int i = 0; i < n; i++)
{
strcat_P( buff, (const char *) pgm_read_word(&(STR[i])));
Serial.println(buff);
}
Serial.println();
}
Did you read the PROGMEM - Arduino Reference and Gammon Forum : Electronics : Microprocessors : Putting constant data into program memory (PROGMEM).
When you want to concatenate two strings, the source can be in flash (PROGMEM), but the destination must be RAM. That means the buffer has to be large enough to hold the result of all the concatenation.