fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786)
VC6 編譯器較舊,對複雜模板、內聯函數、運算子多載、遞迴模板等現代 C++ 特性支援不佳,遇到語法合法但語義複雜的代碼易觸發內部錯誤。提供的代碼存在多處問題:
f1() 返回 int 但用於分母簡約邏輯有誤。d、a、p。main 拼寫為 mian。f1 為成員但友元中當自由函數調用。static int gcd(int a, int b)。/Od)、分拆編譯單元、避免複雜模板。class Ratio {
int num, den;
static int gcd(int a, int b) { return b==0? a : gcd(b, a%b); }
void normalize() { int g = gcd(num, den); num/=g; den/=g; if(den<0){num=-num; den=-den;} }
public:
Ratio(int n=0, int d=1): num(n), den(d) { normalize(); }
friend Ratio operator+(const Ratio&, const Ratio&);
friend Ratio operator-(const Ratio&, const Ratio&);
friend Ratio operator*(const Ratio&, const Ratio&);
friend Ratio operator/(const Ratio&, const Ratio&);
friend Ratio operator-(const Ratio&); // 一元負號
friend ostream& operator<<(ostream&, const Ratio&);
};