VC6.0中友元函数无法访问类私有成员的解决办法
2010-07-19 20:39
253 查看
举个例子:
这些代码在VC6.0中不能被编译通过:提示不能访问私有成员,没有这个访问权限
改成这样就可以了,代码如下:
原因:
这据说是VC的一个经典BUG。和namespace也有关.
只要含有using namespace std; 就会提示友员函数没有访问私有成员的权限。
解决方法:去掉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声明什么.
下面给出流浪给的解决办法:
#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中不能被编译通过:提示不能访问私有成员,没有这个访问权限
改成这样就可以了,代码如下:
#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; }
原因:
这据说是VC的一个经典BUG。和namespace也有关.
只要含有using namespace std; 就会提示友员函数没有访问私有成员的权限。
解决方法:去掉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补丁,貌似不好使。。。(呵呵,是貌似也没用) //方法五:换别的对标准C++支持好的编译器,如DEV C++/。。。(呵呵)
相关文章推荐
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法-------VC6.0的bug
- VC6.0中友元函数无法访问类私有成员的解决办法-------VC6.0的bug
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法
- VC6.0中友元函数无法访问类私有成员的解决办法(VC6.0的bug)
- VC6_0中友元函数无法访问类私有成员的解决办法---VC6_0的经典bug(转)
- VC6_0中友元函数无法访问类私有成员的解决办法---VC6_0的经典bug(转)
- VC++6.0中利用友元函数进行重载时出现不能访问私有成员的解决办法
- 解决VC6.0中友元方式重载运算符时无法访问类私有成员
- “friend声明友元函数,友元函数却依旧无法访问该类的私有属性”的解决方法
- 友元函数 无法访问 类私有成员
- VC6.0中重载操作符函数无法访问类的私有成员[转]
- 友元函数 无法访问 类私有成员
- error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)---解决办法