I cant pass `fstream` as an argument to a function

Like `fname(fstream , char []); /* Prototype */`

and call `fname(fs, p);`

it throws error, 

```
In copy constructor ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’:
/usr/include/c++/4.8/bits/ios_base.h:786:5: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
     ios_base(const ios_base&);

```

I later learned that i have to use `fstream&`. I am just wondering does streams are treated differently than objects ? if yes can someone just tell some proper source of reading so that I don't mess up again.
Thanks a lot.