Ключевое слово using
просто означает, что вы можете получить доступ к чему-либо без добавления префикса к его пространству имен. Другими словами, using std::ofstream;
просто говорит, что вы можете получить доступ к std::ofstream
как ofstream
.
Вам также, похоже, нужен #include <iostream>
; вот почему компилятор не знает, что такое ostream
. Поместите это, измените объявление друга на friend std::ostream& operator<< (std::ostream&, const Dog&);
и избавьтесь от всего, что связано с using
, так как плохо ставить using
в заголовок, и с вами все будет в порядке.