Во-первых, позвольте мне сказать, что ваша функция выглядит немного странно, если вы передаете параметр fileName, но затем используете FILENAME внутри, а fileName просто используется для вывода ошибок.Я думаю, это не совсем правильно.
Во-вторых, проблема const char *.Сам по себе char - это просто char (символ) и как таковой только один символ.Таким образом, const char FILENAME = "file.txt" не будет работать.Вместо этого вам понадобится массив символов (const char FILENAME [] = ...), или, как это делается в C, используйте указатель на место в памяти текста, то есть char *.
Поскольку вы, кажется, используете STL, может быть хорошей идеей будет просто отказаться от char * и вместо этого преобразовать в std :: string.
В-третьих, указатель на ссылку часто является делом вкуса,В конце они оба делают то же самое, и в компиляторе они фактически одинаковы.Единственное различие в использовании заключается в том, что вы не можете передать пустую (нулевую) ссылку, но вы можете передать нулевой указатель.Поэтому обычно рекомендуется использовать ссылки, если вам действительно нужен переданный объект, и указатель на все, что может быть необязательным (в этом случае вы должны обработать ptr == NULL).Также строки C, представляющие собой char * и другую выделенную вручную память, обычно отправляются через указатель.