轉(zhuǎn)自:http://hi.baidu.com/%C4%CF%B7%C9%D1%E3%D1%E3%C4%CF%B7%C9/blog/item/4722d43c53868b09bba1672e.html
舉個(gè)例子:
#include<iostream>
using namespace std;
class cylinder


{
friend istream operator>>(istream& is,cylinder &cy);
public:
inline double square()

{ return length*(width+height)*2+width*height*2; }
inline double volume()

{ return length*width*height; }
private:
double length;
double width;
double height;
};
istream operator>>(istream is,cylinder &cy)


{
cout<<"input length:"<<endl;
is>>cy.length;
cout<<"input width:"<<endl;
is>>cy.width;
cout<<"input height:"<<endl;
is>>cy.height;
return is;
}
int main()


{
cylinder first;
cin>>first;
cout<<first.square()<<endl;
cout<<first.volume()<<endl;
return 0;
}
這些代碼在VC6.0中不能被編譯通過:提示不能訪問私有成員,沒有這個(gè)訪問權(quán)限
改成這樣就可以了,代碼如下:(我用的這個(gè)方法,但是得把變量改成public才行)
#include<iostream>
using std::cin;
using std::endl; using std::cout;
using std::ostream;
using std::istream;
using std::ostream;
class cylinder


{
friend istream operator>>(istream& is,cylinder &cy);
public:
inline double square()

{ return length*(width+height)*2+width*height*2; }
inline double volume()

{ return length*width*height; }
private:
double length;
double width;
double height;
};
istream operator>>(istream is,cylinder &cy)


{
cout<<"input length:"<<endl;
is>>cy.length;
cout<<"input width:"<<endl;
is>>cy.width;
cout<<"input height:"<<endl;
is>>cy.height;
return is;
}
int main()


{
cylinder first;
cin>>first;
cout<<first.square()<<endl;
cout<<first.volume()<<endl;
return 0;
}
原因:
這據(jù)說是VC的一個(gè)經(jīng)典BUG。和namespace也有關(guān).
只要含有using namespace std; 就會提示友員函數(shù)沒有訪問私有成員的權(quán)限。
解決方法:去掉using namespace std;換成更小的名字空間。
例如:
含有#include <string>就要加上using std::string
含有#include <fstream>就要加上using std::fstream
含有#include <iostream>就要加上using std::cin; using std::cout; using std::ostream; using std::istream; using std::endl; 等等,需要什么即可通過using聲明什么.
下面給出流浪給的解決辦法:
//方法一:
//提前聲明
class cylinder;
istream &operator>>(istream& is,cylinder &cy);
//方法二:
//不用命名空間 或者 像晨雨那樣寫
#include<iostream.h>
//方法三:
class cylinder
{
friend istream &operator>>(istream& is,cylinder &cy)//寫在類里面
{
cout<<"input length:"<<endl;
is>>cy.length;
cout<<"input width:"<<endl;
is>>cy.width;
cout<<"input height:"<<endl;
is>>cy.height;
return is;
}
..........
//方法四:打SP6補(bǔ)丁,貌似不好使。。。(呵呵,是貌似也沒用)
//方法五:換別的對標(biāo)準(zhǔn)C++支持好的編譯器,如DEV C++/。。。(呵呵)
本文來自CSDN博客,轉(zhuǎn)載:http://blog.csdn.net/zgjxwl/archive/2008/10/13/3067973.aspx