Because they are not the internal members of the class. the format in which you specify is such that the function needs to be external.

cout<<YourVariable<<endl;

Now if you get into the operator overloading this should be

OutputClassFunction.Operator <<(YourVariable)

And so you need the first parameter as IO class variable and so you cannot have the function as internal.