Hi, I am doing a project where i make my own ADT, in this case a chemical compound. I am having problems overloading the << operator as a friend function and still being able to access private class variables. Any help would be appreciated, here is the code:

Compound.h
Code:
#include <iostream>
#include <string>
  
using namespace std;
  
class Compound{
  
  public:
         //constructors and accessors here

   friend ostream & operator<< ( ostream & os, const Compound & source );
  friend istream & operator>> ( istream & is, Compound & target );
  
 private:
           string name, ion;
           int protons, neutrons, electrons, weight, charge;
};
  
ostream & operator<< ( ostream & os, const Compound & source );
istream & operator>> ( istream & is, const Compound & target );

Compound.cc
Code:
#include "Compound.h"
#include <string>
  
using namespace std;

//all accessors/constructors done here

ostream & operator<< ( ostream & os, const Compound & source )
{
  os << source.name;
  return os;
}
 
istream & operator>> ( istream & is, const Compound & target )
{
  is >> target.name;
  return is;
}
The error
Code:
Compound.h: In function `std::istream& operator>>(std::istream&, const Compound&)':
Compound.h:44: error: `std::string Compound::name' is private
Compound.cc:147: error: within this context

Also, as you can see in my .h file i did 'using namespace std;'
My prof said not to use this but when I remove it nothing seems to work even though I also use it in the *.cc implementation file, mainly it says 'strings' arent a type even tho I #include <string>. Any suggestions here would be helpful as well. If more code is needed to see the problem let me know, thanks.
-alex