今天写了一个简单的运算符重载的例子,结果总是提示错误,后经查阅资料,发现原来是 VC6.0 的一个Bug 作怪,现将代码描述如下:
#ifndef _POINT_H_
#define _POINT_H_
#include <iostream>
using namespace std;


class Point
{
public:
Point(double,double);
friend Point operator+(Point &, Point &);
void Output();
protected:
double m_x;
double m_y;
};
#endif
经编译,提示“fatal error C1001: INTERNAL COMPILER ERROR".
一种解决方案是:
将
#include <iostream>
using namespace std;
替换为
#include<iostream.h>
另外一种方案就是:
在开头的地方加上类和重载运算函数的声明。 即
#ifndef _POINT_H_
#define _POINT_H_
#include <iostream>
using namespace std;

class Point;
Point operator+(Point &, Point &);


class Point
{
public:
Point(double,double);
friend Point operator+(Point &, Point &);
void Output();
protected:
double m_x;
double m_y;
};
#endif
#ifndef _POINT_H_
#define _POINT_H_
#include <iostream>
using namespace std;

class Point
{
public:
Point(double,double);
friend Point operator+(Point &, Point &);
void Output();
protected:
double m_x;
double m_y;
};
#endif经编译,提示“fatal error C1001: INTERNAL COMPILER ERROR".
一种解决方案是:
将
#include <iostream>
using namespace std;
#include<iostream.h> 另外一种方案就是:
在开头的地方加上类和重载运算函数的声明。 即
#ifndef _POINT_H_
#define _POINT_H_
#include <iostream>
using namespace std;
class Point;
Point operator+(Point &, Point &);

class Point
{
public:
Point(double,double);
friend Point operator+(Point &, Point &);
void Output();
protected:
double m_x;
double m_y;
};
#endif
本文介绍了一种在使用VC6.0编译器时遇到的运算符重载问题及其解决方法。主要问题是编译时出现内部编译错误,通过调整头文件包含方式或提前声明类及运算符函数解决了这一问题。

1万+

被折叠的 条评论
为什么被折叠?



