c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'
来源:互联网 发布:office2016 for mac卡 编辑:程序博客网 时间:2024/06/01 10:43
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>
- c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'
- error C2248: cannot access private member declared in class
- 重载operator<<的迷惑,关于cannot access private member declared in class
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- Qt编译错:cannot access private member declared in class 'QObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class
- error C2248: 'std::basic_ios::basic_ios' : cannot access private member declared in class 'std::basic_ios'
- error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'全解
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
- Visual C++ error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject
- CstringArray error C2248: 'CObject::CObject' : cannot access private member declared in class
- cannot access private member
- 任务管理器的创建
- 数对之差的最大值
- 项目中遇到的httpclient性能问题
- POJ 2251 Dungeon Master
- Linux 找不到php.ini
- c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'
- pongo庞果:xml字符串文件的解析——为什么我的代码效率低?
- 《Professional Java Tools For Extreme Programming》
- 【树形DP】 HDU 2196 Computer
- uva 11111
- poj 2553 强连通
- 线程睡眠,挂起,阻塞的一个形象比喻
- Java中 forward 和redirect的区别
- SQL基础--视图