这个问题我很清楚:
我们的课本上写的有(《面向对象程序设计》武汉理工大学出版社 闵联营 主编)
是这样的,首先,以下写法从C++语法角度分析是正确的(在gcc等编译器下编译通过)
#include
using namespace std;
......
class Date{
friend ostream & operator<<(ostream& out,Date s);
};
......
但是为什么在VC++6.0上编译不通过呢?
我们的教科书上是这样写的:因为旧的VC++6.0中的不带.h的头文件iostream没有完全实现C++的标准,这个友员就是它没有实现的内容之一,所以无法编译通过。但VC++6.0中带.h的头文件iostream.h却实现了。
这是编译器的问题,你的程序是正确的。
解决办法:
去微软官方网站下载VS6.0 SP6安装。你用的VC++6.0是盗版的吗?注意,很多盗版的VC++6.0称已经打了SP6补丁,其实是假的。我遇到过这种例子,我当时去微软官方网站下载sp5 sp6 依次安装后,就可以了。
#include
#include
就可以了。 在C++ 6.0里,很少用命名空间。
代码贴出来看看。。
一楼说的对!
在有的编译器中不能在同时包含头文件iostream.h和string.h的时候使用Using namespace std;
这样会出现重复包含头文件的错误的提示。
但是要实现上述的功能,只需要将#include
这样就可以通过编译了!!
或者采用下面这种方法:
去掉语句Using namespace std;
在每次使用标准库中的std命名空间的内容的时候就在前面加上ios::就可以了。
这样也可以实现上面的要求!!
你可以自己试一试!!