• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[置顶]c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannotaccess ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'


代码如下:

#ifndef _DATE_H_
#define _DATE_H_
#include<iostream>
using namespace std;

class Date
{
public:
	Date();
	Date(int y,int m,int d);
	void printOn();
private:
	int _year;
	int _mounth;
	int _day;

friend const ostream& operator<<(ostream & out,Date d);
};
Date::Date():_year(0),_mounth(0),_day(0)
{}
Date::Date(int y,int m,int d):_year(y),_mounth(m),_day(d)
{
}
void Date::printOn()
{
 cout<<*this;
 
}

const ostream& operator<<(ostream & out,Date d)
{
	out<<d._year<<d._mounth<<d._day<<endl;
	return out;
}
#endif

错误提示如下图:



据说是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声明什么.


更正后如下:

#ifndef _DATE_H_
#define _DATE_H_
#include<iostream>

//using namespace std;
using std::cin;
using std::endl; 
using std::cout;
using std::ostream;
using std::istream;
class Date
{
public:
	Date();
	Date(int y,int m,int d);
	void printOn();
private:
	int _year;
	int _mounth;
	int _day;

friend const ostream& operator<<(ostream & out,Date d);
};
Date::Date():_year(0),_mounth(0),_day(0)
{}
Date::Date(int y,int m,int d):_year(y),_mounth(m),_day(d)
{
}
void Date::printOn()
{
 cout<<*this;
 
} 
const ostream& operator<<(ostream & out,Date d)
{
	out<<d._year<<d._mounth<<d._day<<endl;
	return out;
}
#endif

 

或者更改如下:

#include<iostream.h>




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中利用双缓冲技术解决绘图闪屏问题。发布时间:2022-07-13
下一篇:
C++中的类继承(1)三种继承方式发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap