上面的例题问?

xddjd 2001-11-29 07:08:51
当我用#include <iostream.h>编译,次程序可以通过!
假如用
#include <iostream>
using namespace std;
编译会出现以下错误:(错误指向第一个friend函数)
fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.

rmbf.exe - 1 error(s), 0 warning(s)

请问大侠原因何在?为什么不可以用第二种方式?
#include <iostream.h>

class RMB
{
public:
RMB(unsigned int d, unsigned int c);
friend RMB operator +(RMB&, RMB&);
friend RMB& operator ++(RMB&);
void display()
{
cout <<(yuan + jf/100.0) << endl;
}
protected:
unsigned int yuan;
unsigned int jf;
};

RMB::RMB(unsigned int d, unsigned c)
{
yuan = d;
jf = c;
while(jf >= 100)
{
yuan ++;
jf -= 100;
}
}

RMB operator + (RMB &p, RMB &q)
{
unsigned int jf = p.jf + q.jf;
unsigned int yuan = p.yuan + q.yuan;
RMB result(yuan,jf);
return result;
}

RMB& operator ++(RMB &q)
{
q.jf++;
if(q.jf >= 100)
{
q.jf -= 100;
q.yuan++;
}
return q;
}
void main()
{
RMB d1(1,60);
RMB d2(2,50);
RMB d3(0,0);
d3 = d1 + d2;
++ d3;
d3.display();
}
...全文
153 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujunyao 2001-12-01
  • 打赏
  • 举报
回复
xddjd 你的问题和我的问题一样,好像只要引入了std,那么就没有办法把operator =,-,<<之类的声明为友元。 但是同样的程序我发给上交的同学,他的机子就能过,郁闷死我了。
xddjd 2001-12-01
  • 打赏
  • 举报
回复
我是英文版的,看来大家两种方法都可以通过,那就是我的vc有问题,这个问题该结账了!
xddjd 2001-11-30
  • 打赏
  • 举报
回复
都加这么多分了,还没有大侠愿意帮忙吗?
  • 打赏
  • 举报
回复
你是用的创天版的VC吧?
如果是的话,就去找个英文版的试试看....
xddjd 2001-11-30
  • 打赏
  • 举报
回复
TO:aauhii(菜鸟)
但是以后编程碰到这样的问题怎么办,因为基本上都是要用到using namespace std;
不可能每个都加std::来调用啊.假如程序很大,那岂不是很难受.
而且我还想说的是上面用第二种方法出错的地方指向第一个friend函数哪里.
请各位大侠帮忙!
xddjd 2001-11-30
  • 打赏
  • 举报
回复
是不是我的vc6.0有问题?
aauhii 2001-11-30
  • 打赏
  • 举报
回复
我也一直using namespace std;冲突也没那么多, 就算都要替换, 用搜索替换也不慢, 呵呵, 我也是菜鸟, 也希望高手指教.
xddjd 2001-11-30
  • 打赏
  • 举报
回复
奇怪,是我的vc++有问题?
ccddd123 2001-11-30
  • 打赏
  • 举报
回复
其实都没问题。
我把两种方式都试了一下,编译和运行都没有问题,结果一样。理论上也应该是这样的,
他们是等效的。
xddjd 2001-11-30
  • 打赏
  • 举报
回复
我可能说的不明白,
第一种方式是
#include <iostream.h>
第二种方式是
#incldue <iostream>
using namespace std;
第二种方式报错
上面的大侠你用的是那种方式?
kinghawk 2001-11-30
  • 打赏
  • 举报
回复
我用第二种方式编译通过了!VC++。
应该没有错误!
jacklondon 2001-11-29
  • 打赏
  • 举报
回复
VC的#include <iostream>和cout等有一些小冲突。
aauhii 2001-11-29
  • 打赏
  • 举报
回复
去掉using namespace std;
改cout 为 std::cout
xddjd 2001-11-29
  • 打赏
  • 举报
回复
但是在vc++6.0我一直用的是
#include <iostream>

using namespace std;
xiaodeshi 2001-11-29
  • 打赏
  • 举报
回复
你使用的是c++ standard library中声明的标准方法,但是再目前为止还没有完全支持此标准的complier存在。
ggyy 2001-11-29
  • 打赏
  • 举报
回复
#include <iostream>
文件没有后缀,不可以
xddjd 2001-11-29
  • 打赏
  • 举报
回复
up!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧