VC++6.0在重载操作符时时定义为友元,报错fatal error C1001: INTERNAL COMPILER ERROR解决方案

来源:互联网 发布:勇者斗恶龙8知乎 编辑:程序博客网 时间:2024/06/06 09:07

今天帮别人回答问题的时候,用VC6.0测试了一下他的代码,因为这个编译器启动较快,这点比较喜欢,发现了以前一直没有注意的问题。

先贴出错误现象:

--------------------Configuration: 2 - Win32 Debug--------------------Compiling...2.cppC:\Users\Administrator\Desktop\2.cpp(14) : 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 informationError executing cl.exe.2.obj - 1 error(s), 0 warning(s)

当时看到这样的错误,心想这是神马错误。然后再仔细看了一遍代码,发现确实没有问题啊?这个时候首先想到的就是换个编译器试试,换了个高级的编译器(VC9.0),跑了一下果然没有问题。然后就到谷歌上贴上错误提示搜了一下,果然还是有很多人遇到了这个问题,提到了两种解决方法。

1.在VC6.0的代码中,用#include <iostream.h>

2.增加前导声明

代码如下:

//第一种方式/*#include<iostream> using namespace std; class A;//前导声明A operator+(A a, A b);//前导声明*///第二种方式#include <iostream.h>class A {private:int x; public: A() : x(0) {} A(int a) : x(a) {} A(A &a) { x = a.x; } friend A operator+(const A &a1, const A &a2); void disp() { cout << x << endl; } }; A operator+(const A &a1, const A &a2) {A temp(a1.x + a2.x); return temp; } int main() { A a1(1), a2(3), temp; temp = a1 + a2; temp.disp(); return 0;}
PS:经过这个事情更加觉得还是少用VC6.0的好,个人想法,仅供参考。
参考资料:http://lihuan-dianxian.blogbus.com/logs/42102230.html

0 0
原创粉丝点击