VC6.0中友元函数无法访问类私有成员的解决办法
举个例子:
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#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中不能被编译通过:提示不能访问私有成员,没有这个访问权限
改成这样就可以了,代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#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声明什么.
下面给出流浪给的解决办法:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//方法一://提前声明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; } |
VC6.0中友元函数无法访问类私有成员的解决办法的更多相关文章
- [置顶] c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'
c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date' ...
- 解决"VC6.0的ClassView里不能显示类或成员变量"问题
VC6.0是微软1998年公布的,是一款非常经典的编辑器.然而它有几个非经常见的bug,比方, .cpp文件打不开,智能提示出现异常.这里介绍"VC6.0的ClassView里不能显示类或成 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法. 这2种方式都可以实现不用persist ...
- AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法
在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...
- php中date函数获取当前时间的时区误差解决办法
例:echo date('Y-m-d H:i:s', time()); 输出时间:2008-10-12 02:32:17 但实际时间是:2008-10-12 10:32:17时间误差8个小时 PHP手 ...
- [C#]通过反射访问类私有成员
参考链接: https://www.cnblogs.com/adodo1/p/4328198.html 代码如下: using System; using System.Reflection; usi ...
- VC6.0中重载操作符函数无法访问类的私有成员
整理日: 2015年03月18日 在 C++ 中,操作符(运算符)可以被重载以改写其实际操作.同时我们可以定义一个函数为类的朋友函数(friend function)以便使得这个函数能够访问类的私有成 ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cl ...
随机推荐
- UnicodeToGB2312
http://www.myluoluo.com/unicodetogb2312.love 你是否遇到类似于:\u5355\u4f4d之类的让人纠结的字符? 一个JS文件中一堆一堆的全都是这种,分析起来 ...
- UWP x:bind
x:bind 作为win10 新特性,它好在哪?为什么要用它. 最近做UWP,对代码进行重构,对它有了一些了解. 先说优点: 1.性能高,内存小(相比传统的binding) 没图没真相,我先上2张图. ...
- Java数组技巧攻略
Java数组技巧攻略 0. 声明一个数组(Declare an array) String[] aArray = new String[5]; String[] bArray = {" ...
- Codeforces444C DZY Loves Colors(线段树)
题目 Source http://codeforces.com/problemset/problem/444/C Description DZY loves colors, and he enjoys ...
- Python for Infomatics 第12章 网络编程五(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.8 用urllib读取二进 ...
- BZOJ1090: [SCOI2003]字符串折叠
区间dp. 一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); 一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+ca ...
- Spring基础学习笔记-Bean的基础知识
一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...
- 删除 TOMCAT 上次关闭遗留下来的 SESSION 缓存
参考:删除缓存SESSION 找到tomcat目录下文件:%tomcat home%/conf/context.xml,在标签<Resource>前添加 <Manager pathn ...
- 关于ps中的锯齿
1.1 索引透明颜色与Alpha透明通道 要说索引颜色透明,首先要讲讲什么是索引颜色,百度百科上有对索引颜色的解释,我觉得很关键的一句是“挑选一副图片中最有代表性的若干种颜色(通常不超过256种) ...
- SQL SERVER 数据库操作脚本
创建数据库 create Database MYDB on ( Name=mydb_dat, FileName='c:\data\mydate.mdf',size=10,maxsize=50 ) LO ...