2014-03-28 4 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; 
} 

Причина заключается в том, что с = а дает пустоту и есть нет оператора < < который работает на void с левой стороны

Просто для ясности, вы можете переписать так:

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

ortang также верно, что должен быть оператор < < для комплексного класса.

+0

Спасибо @Josh, я попробовал, но я получаю ошибку, что она должна быть нестатической функцией memeber. –

2

Проблема заключается в out << a << endl << b << endl, так как вы не перегрузили operator<< для класса Complex.

Посмотрите на this SO post как перегрузить operator<<.

+0

Я определил их в файле cpp. Возникает вопрос: оператор =. Однако, спасибо за то, что вы указали это, моя вина не публиковать мой файл cpp. –

2

Если real и imag сами типов с правильной семантикой присваивания (например примитивными типами, такими как int или double), то избыточным и подверженные ошибки реализовать свой собственный operator=. Просто используйте созданный компилятором.

2

Даже с соответствующими операторами

out << c=a <<endl; 

, который обрабатывается как

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

происходит ошибка, из-за приоритета операторов.

Смежные вопросы