C++异常,小弟我解决不了,友元函数访问不了所在声明类的私有变量

C++错误,我解决不了,友元函数访问不了所在声明类的私有变量
C/C++ code
#include<iostream>
using namespace std;

class test
{
private:
    int i;
    float f;
    char ch;
public:
    test(int a=0, float b=0, char c='\0')
    {
        i = a;
        f = b;
        ch = c;
    }
    friend ostream& operator<<(ostream &, test);
    friend istream& operator>>(istream &, test &);
};

ostream& operator<<(ostream &stream, test obj)
{
    stream << obj.i << ",";
    stream << obj.f << ",";
    stream << obj.ch << endl;
    return stream;
}

istream& operator>>(istream &t_stream, test &obj)
{
    t_stream >> obj.i;
    t_stream >> obj.f;
    t_stream >> obj.ch;
    return t_stream;
}

void main()
{
    test A(45, 8.5, 'W');
    operator<<(cout, A);
    test B, C;
    cout << "Input as i f ch:";
    operator>>(cin, B);
    operator>>(cin, C);
    operator<<(cout, B);
    operator<<(cout, C);
}

书上的代码
上机环境VC6
错误信息:
--------------------Configuration: exp9.2 - Win32 Debug--------------------
Compiling...
exp9.2.cpp
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(23) : error C2248: 'i' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(7) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(24) : error C2248: 'f' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(8) : see declaration of 'f'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(25) : error C2248: 'ch' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(9) : see declaration of 'ch'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(31) : error C2248: 'i' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(7) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(32) : error C2248: 'f' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(8) : see declaration of 'f'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(33) : error C2248: 'ch' : cannot access private member declared in class 'test'
  C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(9) : see declaration of 'ch'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(40) : error C2668: '<<' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(43) : error C2668: '>>' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(44) : error C2668: '>>' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(45) : error C2668: '<<' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(46) : error C2668: '<<' : ambiguous call to overloaded function
Error executing cl.exe.

------解决方案--------------------