Скажите std::fstream file;
вместо fstream file;
, поскольку fstream
объявлено в стандартном пространстве имен std
, а не в глобальном пространстве имен.
В файле .cpp
, соответствующем FileOp.h
, вы можете выбрать using namespace std;
в этом файле .cpp
, если вы не хотите вводить std::
везде в этом файле (это в основномвопрос вкуса и вероятность того, что вы захотите получить конфликты имен. Если все имена std::
безоговорочно видимы, возрастает вероятность конфликтов имен с глобальными именами).Но не помещайте такую строку в заголовок.
Поскольку ваш код представляется целиком в один файл .h
, у вас не будет такой возможности.Но вы можете локально в функциях-членах сказать using namespace std;
или объявить отдельные имена как псевдонимы в локальной области функций-членов, например, using std::fstream;
, если хотите.
Кроме того, вам нужно поместить определение этих функций.функции-члены (из шаблона класса) в пределах защиты заголовка, если не непосредственно в теле класса, если хотите.Ваши другие сообщения об ошибках появляются потому, что вы включаете заголовок несколько раз, но определения функций-членов, появляющиеся за пределами защиты заголовка, будут ошибочно передаваться в модуль перевода несколько раз, вызывая множество ошибок определений во время компиляции.