2014-09-24 55 views
0

我得到奇怪的通知,我使用類的私有成員 - 這是完全有效的,但我雖然允許我這樣做,因爲我確實說過方法我使用是友好的。類的私人成員 - 在這種情況下

看看這個:

#include <iostream> 

using namespace std; 


class complex { 

private: 
    double Re, Im; 

public: 

    complex(): Re(0.0), Im(0.0){} 
    complex(double Re, double Im): Re(Re), Im(Im){} 
    double getRe() const { return Re; } 
    double getIm() const { return Im; } 
    friend complex operator+(const complex&, const complex&); 
    friend ostream& operator<<(ostream&, const complex&); 
    friend istream& operator>>(istream &, const complex &); // FRIENDLY FUNCTION 
}; 


complex operator+(const complex& a, const complex& b) { 
    double r, i; 
    r = a.getRe()+ b.getRe(); 
    i = a.getIm() + b.getIm(); 
    return complex(r, i); 
} 

ostream& operator<<(ostream& out, const complex &a) { 
    out << "(" << a.getRe() << ", " << a.getIm() << ")" << endl; 
    return out; 
} 

istream &operator>>(istream &in, complex &c)  
{ 
    cout<<"enter real part:\n"; 
    in>>c.Re; // ** WITHIN THIS CONTEXT ERROR ** 
    cout<<"enter imag part: \n"; 
    in>>c.Im; // ** WITHIN THIS CONTEXT ERROR ** 
    return in; 
} 

int main(void) { 
complex a, b,c; 

cin >> a; 
cin >> b; 
c = a+b; 

cout << c; 

} 

如果我爲了得到它們是私有的價值觀聲明某種setFunction的類中?

回答

5
istream& operator>>(istream &, const complex &); 

是不一樣的

istream &operator>>(istream &in, complex &c); 

現貨留給讀者做練習的差異。

+0

那裏已經做到了。仍然得到完全相同的錯誤:( – 2014-09-24 09:11:44