为什么我在VC6下不能把在头文件中的一个类中声明的友元函数,在其他文件中定义,老是不能访问类中的私有变量,就好像不是友元函数一样,比如:
//头文件 complex.h
#include <iostream>
using namespace std;
class Complex
{
private:
double real;
double imaginary;
public:
Complex(){real=imaginary=0;}
Complex(double rl,double im){real=rl;imaginary=im;};
friend istream & operator>>(istream & os,Complex & plex);
};//函数定义文件
#include "complex.h"istream & operator>>(istream & os,Complex & plex)
{
cout<<"real:";
os>>plex.real;
cout<<"imaginary:";
os>>plex.imaginary;
return os;
}这个友元函数,就是无法成功编译,但把它作为内联函数直接放到头文件中定义,却可以编译,我不太懂VC6的集成环境,不知哪里出了问题?
//头文件 complex.h
#include <iostream>
using namespace std;
class Complex
{
private:
double real;
double imaginary;
public:
Complex(){real=imaginary=0;}
Complex(double rl,double im){real=rl;imaginary=im;};
friend istream & operator>>(istream & os,Complex & plex);
};//函数定义文件
#include "complex.h"istream & operator>>(istream & os,Complex & plex)
{
cout<<"real:";
os>>plex.real;
cout<<"imaginary:";
os>>plex.imaginary;
return os;
}这个友元函数,就是无法成功编译,但把它作为内联函数直接放到头文件中定义,却可以编译,我不太懂VC6的集成环境,不知哪里出了问题?
解决方案 »
- 讨论一个非技术性的问题:字眼“编辑”VS“修改”
- 我有几句话不懂,请给小弟解释一下,?是关于一个屏保的?
- VC中的动态问题:!!!!急!!谢谢
- 传输图像的问题?
- 寻找有志于学习精通的朋友
- 100分求助 能不能提供一些有关图像分割的算法及代码!谢谢
- html文件,下拉框连接,但连不上,谁帮我看看,
- 有谁知道写介绍模拟器开发的网站?
- 请大家说一下com的正确学习线路
- 关于CListCtrl的NOSCROLL属性的问题:scorll和head一定要一起出现么?
- #inlude "MySock.h" 和 class CMySock;有什么区别,互换好像不行吧
- 请手边有VC的老大帮我查查这个数的值(好像在windows.h):IOCTL_CHANGE_GET_PRODUCT_DATA
#include <iostream>
using namespace std;
// 添加下面这一句试试
istream & operator>>(istream & os,Complex & plex);class Complex
{
private:
double real;
double imaginary;
public:
Complex(){real=imaginary=0;}
Complex(double rl,double im){real=rl;imaginary=im;};
friend istream & operator>>(istream & os,Complex & plex);
};//函数定义文件
#include "complex.h"istream & operator>>(istream & os,Complex & plex)
{
cout<<"real:";
os>>plex.real;
cout<<"imaginary:";
os>>plex.imaginary;
return os;
}
这个函数的声明一定得让它对于类 Complex 可见.不然就无法编译, 这是肯定的.
class Complex
{
private:
double real;
double imaginary;
public:
Complex(){real=imaginary=0;}
Complex(double rl,double im){real=rl;imaginary=im;};
friend istream & operator>>(istream & os,Complex & plex); //就是它
};如果还要在类上声明一次,那为何我把类中的友元函数声明直接该成内联函数,就可以了呢?,如:
class Complex
{
private:
double real;
double imaginary;
public:
Complex(){real=imaginary=0;}
Complex(double rl,double im){real=rl;imaginary=im;};
friend istream & operator>>(istream & os,Complex & plex)
{
cout<<"real:";
os>>plex.real;
cout<<"imaginary:";
os>>plex.imaginary;
return os;
}; //为什么这样是可以的?
};
1. 浏览函数定义不方便, 因为源码太长, 不能一页看上好几个函数定义
2. 你无法将你的库发布而又不公开源码
3. 每次编译都得把未修改的 cpp 文件再次编译
.............