Любая идея, почему я получаю эти две ошибки в моей программе на C ++? - PullRequest
2 голосов
/ 22 мая 2011

Я пишу программу, которая создает класс комплексных чисел, и получаю эти две ошибки, когда пытаюсь проверить мой перегруженный оператор >>.Вот ошибки:

ошибка LNK2028: неразрешенный токен (0A0002BD) "класс std :: basic_istream> & оператор __cdecl >> (класс std :: basic_istream> &, класс Complex const &)" (5 @ $$ FYAAAV? $ Basic_istream @ DU? $ Char_traits @ D @ std @@@ std @@ AAV01 @ ABVComplex @@@ Z) ссылка на функцию "int __cdecl main (void)" (? Main @@ $$ HYAHXZ)

ошибка LNK2019: неразрешенный внешний символ "оператор класса std :: basic_istream> & __cdecl >> (класс std :: basic_istream> &, класс Complex const &)" (?? 5 @ $$ FYAAAV? $ basic_istream @ DU? $ char_traits @ D @ std @@@ std @@ AAV01 @ ABVComplex @@@ Z) ссылка на функцию "int __cdecl main (void)" (? main @@ $$ HYAHXZ)

Вот моя функция перегрузки:

istream& operator >> (istream& in, Complex& a){
    double real, imaginary;
    in >> real >> imaginary;
    a.setReal(real);
    a.setImaginary(imaginary);  
    return in;
}

Также говорится, что она исходит из моего mainComplex.obj, mainComplex - это файл cpp, в котором есть основная функция, которую я использую для тестирования программы.

int main(){     
    Complex num;
    cout << "Enter Complex number: ";
    cin >> num;
    return 0;
}

Ответы [ 2 ]

4 голосов
/ 22 мая 2011

Компилятор при обработке main обнаружил, что наилучшая перегрузка для выражения cin >> num; равна std::basic_istream<...>& operator>>( std::basic_istream<...>&, const Complex& ), обратите внимание на const во втором аргументе.

Это, вероятно, означает, что вы объявили оператор как:

std::istream& operator>>( std::istream&, const Complex & );

Но затем реализовано:

std::istream& operator>>( std::istream&, Complex & );
0 голосов
/ 22 мая 2011

Я предполагаю, что вы реализовали оператор >> в качестве члена вашего класса, когда на самом деле он должен быть friend, чтобы использовать его так, как вы хотите.

Естьпосмотрите на этот вопрос SO: Должен ли оператор << быть реализован как функция друга или как член? </a>

В Скотте Мейерсе также есть раздел об этих операторах: эффективное программирование на C ++, но яу меня нет книги, чтобы дать ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...