注册 登录
编程论坛 C++教室

友元函数重载出错,求解

心手2012 发布于 2012-04-16 15:25, 502 次点击
程序代码:
#include<iostream>
using namespace std;
class space
{
    int x;
    int y;
    int z;
public:
    space()
    {
        x=1;
        y=1;
        z=1;
    }
    friend void operator-(space &s)//编译时提示这儿有错
    {
        s.x=-s.x;
        s.y=-s.y;
        s.z=-s.z;
    }
    void dispaly()
    {
        cout<<x<<y<<z<<endl;
    }
};

int main()
{
    space p;
    -p;
    p.dispaly ();
    return 0;

}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

我是照书上的写的,只想验证下。结果。。。
请各位帮忙解释下!
11 回复
#2
寒风中的细雨2012-04-16 15:50
vs2008  下没什么错
#3
寒风中的细雨2012-04-16 15:54
重载负号  返回值怎么是void
岂不是 不支持 p = -p;
#4
心手20122012-04-16 16:13
回复 3楼 寒风中的细雨
这是可以的,p是一个对象,-p就是调用operator-()函数,即p.operator-();
#5
寒风中的细雨2012-04-16 18:09
自己能不能先运行试试看
#6
寒风中的细雨2012-04-16 18:17
回复 4楼 心手2012
重载成员函数那是
#7
心手20122012-04-16 18:27
回复 6楼 寒风中的细雨
我把
#include<iostrem>
using namespace std;
改成
#include<iostream.h>
就可以了。
这是什么原因 啊?
#8
寒风中的细雨2012-04-16 19:17
可以看看介绍两者的区别的资料  
#9
心手20122012-04-16 19:33
回复 8楼 寒风中的细雨
看了半天,都说这是新标准和旧的区别,还有有时候两种又都可以,可能是编译器的问题。我去问问我们老师吧

[ 本帖最后由 心手2012 于 2012-4-16 19:36 编辑 ]
#10
飞扬冲天2012-04-16 20:13
-怎么会是void啊?
#11
飞扬冲天2012-04-16 20:26
咦,我用VC6.0不行,用VS2010可以...
#12
心手20122012-04-17 16:27
是编译器的问题,设置下就好了的。谢谢各位
1