2014-03-28 78 views
0

我寫了下面的測試程序:重載=操作

int main(int argc, char** argv) 
    { 

    ifstream inFile; 
    inFile.open("D:\\C++\\Assignments\\in1.txt"); 
    if (!inFile) { 
      cout << "Unable to open file"; 
      exit(1); // terminate with error 
    } 
    Complex a,b,c; 
    inFile >> a; 
    inFile >> b; 
    ofstream out; 
    out.open("D:\\C++\\Assignments\\out1.txt"); 
    out << a <<endl<< b<<endl; // dumps data to a stream connected to a file 
    out << c=a <<endl; 
    out.close(); 



    return 0; 
    } 

我重載=如下:

void Complex::operator=(const Complex &a)//mulptiplication 
    { 
    real=a.real; 
    imag=a.imag; 
    } 

但我得到這樣的錯誤:不對應的ooperator < <。任何人都可以幫助這個錯誤?

+0

請添加編譯器錯誤。 –

回答

2

這是你的問題:

out << c=a <<endl; 

你需要返回一個複雜&

試試這個:

Complex& Complex::operator=(const Complex &a)//mulptiplication 
{ 
    real=a.real; 
    imag=a.imag; 

    return *this; 
} 

的原因是,C = A產生一個空洞,並有沒有運營商< <,在左側無效

只是爲了清楚起見,你不妨改寫:

c = a; 
out << c << endl; 

ortang也是正確的,必須有複雜類的操作< <。

+0

謝謝@Josh,我嘗試過,但我得到錯誤,它必須是一個非靜態memeber函數。 –

2

問題在於out << a << endl << b << endl,因爲您沒有爲我認爲Complex類的operator<<超載。

看看this SO post如何超載operator<<

+0

我已經在cpp文件中定義了它們。問題在於=運算符。不過謝謝你指出,這是我的錯,不發佈我的cpp文件。 –

2

如果realimag本身的類型與正確的語義分配(如原始的類型,如intdouble),那麼它是多餘的,容易出錯實現自己的operator=。只需使用編譯器生成的一個。

2

即使有合適的運營商

out << c=a <<endl; 

被解析爲

(out << c) = (a <<endl); 

發生錯誤時,由於操作者的優先級。