Вы объявили строку имени файла const, которая слишком ограничительна для того, что вы хотите сделать во время выполнения, но может быть выполнена препроцессором во время компиляции, используя правило соседней строки :
#define PART1 "abcd"
#define PART2 "efgh"
const char* p1 = PART1 ;
const char* p2 = PART2 ;
const char* filename = PART1 "_" PART2 ".txt"
Однако, если вам не нужно, чтобы имя файла было const
, используйте одно из уже предложенных решений.