2017-03-01 226 views
0

我一直在試圖將值分配給一小部分類的私有成員,但我被困在ADD功能(友誼的過程),每次提示以下錯誤:的私有成員變量。在C++值分配給一類

error: 'num' was not declared in this scope

#include <iostream> 
#include <string.h> 
using namespace std; 

class fraction 
{ 
long num; 
long den; 

public: 
fraction(); 
fraction(long,long); 
fraction(const fraction&); 
~fraction(); 
long getnum (void); 
long getDen (void); 
void print (void); 
friend void add (const fraction &, const fraction &); 
void sub (fraction, fraction); 
void mult (fraction, fraction); 
void div (fraction, fraction); 
void inc (fraction); 
}; 
fraction::fraction(long l_num,long l_den) 
{ 
    num = l_num ; 
    den = l_den ; 
} 
fraction::fraction() 
{ 
    num = 0L ; 
    den = 1L ; 
} 
fraction::fraction(const fraction& F) 
{ 
    num=F.num; 
    den=F.den; 
} 
fraction:: ~fraction () 
{ 
// cout<<"Destructor"<<endl; 
} 
long fraction::getDen (void) 
{ 
    return den ; 
} 
long fraction::getnum (void) 
{ 
    return num ; 
} 
void fraction:: print (void) 
{ 
    if(den==0) 
     den=1L; 
    cout<<num<<"/"<<den <<endl; 
} 
void add(fraction &f1, fraction &f2) 
{ 
    num = (f1.getnum () * f2.getDen ()) + (f1.getDen () * f2.getnum ()); 
    den = (f1.getDen () * f2.getDen ()); 
} 
void fraction::sub (fraction f1, fraction f2) 
{ 
    num = (f1.getnum () * f2.getDen ()) - (f1.getDen () * f2.getnum ()); 
    den = (f1.getDen () * f2.getDen ()); 
} 
void fraction::mult (fraction f1, fraction f2) 
{ 
    num = (f1.getnum () * f2.getnum ()); 
    den = (f1.getDen () * f2.getDen ()); 
} 
void fraction::div(fraction f1, fraction f2) 
{ 
num = (f1.getnum () * f2.getDen ()); 
den = (f1.getDen () * f2.getnum ()); 
} 
void fraction::inc (fraction f1) 
{ 
    num = (f1.getnum ()) + (f1.getDen ()); 
    den = (f1.getDen ()); 
} 
int main() 
{ 
fraction f1,f2(5L,0L); 
fraction f3(f2); 
f1.print(); 
f2.print(); 
f3.print(); 

f3 = add(f3 , fraction (-7,8)); 
f1 = add(f2,f3); 
f1.print(); 

f1 = sub(f2 , f3); 
f1.print(); 

f1 = mult(f2, f3); 
f1.print(); 

f1.inc().inc().print(); 
f1=div(f2 , f3); 
f1.print(); 

return 0; 
} 

回答

0

成員函數可以訪問成員變量,而不必在他們面前明確指定this.。你利用這個在你的代碼。然而,友元函數不能。在朋友的功能,你需要指定f1.numf2.num(或你想改變任何部分的情況下),而不僅僅是num

0

您可以設計add功能是這樣的:

fraction add(const fraction &f1, const fraction &f2) 
{ 
    long num = (f1.getnum () * f2.getDen ()) + (f1.getDen () * f2.getnum ()); 
    long den = (f1.getDen () * f2.getDen ()); 
    return fraction(num, den); 
} 

add不再需要,如果用這樣的方式是一個friend功能。

你將不得不做一些更多的編輯您的getter函數:

long fraction::getDen (void) const 
{ 
    return den ; 
} 
long fraction::getnum (void) const 
{ 
    return num ; 
} 

請注意,您正在使用add這樣:

f1 = add(f2,f3); 

因此,從add返回一個空不會幫你。

話雖如此,也有你的代碼其他錯誤,你應該看看

+0

當我所做的所有的變化,我收到標識返回1個錯誤 – mwater07

+0

請重新檢查,你可能會定義一個函數不止一次。 – Rishi