回 帖 发 新 帖 刷新版面

主题:运算符重载调试问题!

调试不能通过,错误在哪里?帮忙看下,我新手  ^.^


//成员函数运算符重载,友元函数运算符重载;

#include "iostream"
using namespace std;

class complex    //复数类;
{
public:
    complex(int m, int n)
    {
        a = m;
        b = n;
    }

    inline void printf() const
    {
        cout<<"("<<a<<", "<<b<<")"<<endl;    
    }

    complex operator+(const complex &c);//成员函数运算符重载
    //友元函数运算符重载
    friend complex operator-(const complex &x1, const complex &x2);

//protected:
private:
    int a;
    int b;
};

complex complex::operator+(const complex&x)
{
    complex t;
    t.a = a + x.a;
    t.b = b + x.b;
    return t;
}

complex operator-(const complex &x1, const complex &x2)
{
    complex t;
    t.a = x1.a - x2.a;
    t.b = x1.b - x2.b;
    return t;
}

void main()
{
    complex a(2, 5), b(3, 8);
    (a+b).printf();
    (a-b).printf();
}

调试错误:
--------------------Configuration: 0108-7 - Win32 Debug--------------------
Compiling...
0108-7.cpp
D:\c程序\std1218\0108-7.cpp(22) : 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.

0108-7.exe - 1 error(s), 0 warning(s)

回复列表 (共3个回复)

沙发

1、告诉你的是,你的程序有点问题。我已经改过来了,你对照检查。。
2、对于这类错误,在MSDN上已经有很明确的解释。
MSDN解释:
Avoid using /Zg with a large amount of header file information, such as the MFC class library headers. 
避免使用/ Zg与大量的头文件信息,如标题的MFC类库。所以,建议你把包含文件改成iostream.h

#include <iostream.h>

class Complex
{

private:
    int a;
    int b;

public:
    Complex()
    {
        a = 0;
        b = 0;
    }
    Complex(int m, int n)
    {
        a = m;
        b = n;
    }

    friend Complex operator +(const Complex &x1, const Complex &x2);
    friend Complex operator -(const Complex &x1, const Complex &x2);

    void print(void);
};

Complex operator +(const Complex &x1, const Complex &x2)
{
    Complex t;
    t.a = x1.a + x2.a;
    t.b = x1.b + x2.b;
    return t;
}

Complex operator -(const Complex &x1, const Complex &x2)
{
    Complex t;
    t.a = x1.a - x2.a;
    t.b = x1.b - x2.b;
    return t;
}

void Complex::print()
{
    cout<<"("<<a<<","<<b<<")"<<endl;
}

void main()
{
    Complex a(2, 5), b(3, 8);
    Complex c;

    c = a + b;
    c.print();
    c = a - b;
    c.print();
}

板凳


谢谢,构造函数没有初始化我知道,头文件可以理解,但为什么不能用纯c++的头文件来实现这个呢?

3 楼

可以用纯C++的头文件来实现。。
怎么实现呢?
这就要我们建两个文件,一个是complex.h,另一个是complex.cpp。
当我们这样写它就不会出错。
为什么呢?
微软解释说这是产品的一个错误。
如果我没有猜错的话,你使用的是VC6.0。。
你这个问题,在VC6.0以上的产品是不会出现的。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册