Я недавно начал изучать C ++ и столкнулся с этой проблемой, используя перегруженный оператор ввода >>.
Я пишу класс для описания комплексного числа. Моя проблема: если я поместил свой main () в Complex.cpp, моя программа работает нормально. Но если я создаю новый файл main.cpp и помещаю туда свой main (), я сталкиваюсь с ошибкой.
ошибка: недопустимые операнды для двоичного выражения ('std :: istream' (также известный как basic_istream ')) и 'Complex')
функция-кандидат недопустима: нет известного преобразования из 'std :: istream' (он же 'basic_istream') в 'std :: istream *' (он же 'basic_istream *') для первогоаргумент;примите адрес аргумента с &
(ниже приведено гораздо больше ошибок, но они указывают на istream, поэтому я не думаю, что это проблема)
Это мойзаголовочный файл:
#include <iostream>
using namespace std;
#ifndef HEADER_H
#define HEADER_H
#endif // HEADER_H
class Complex
{
public:
double _real;
double _imag;
public:
Complex(double, double);
double getReal() const;
double getImag() const;
void setReal(double);
public:
Complex operator=(const Complex&);
Complex * operator+(const Complex&);
Complex * operator+(const double&);
friend Complex * operator+(const double&, const Complex&);
Complex * operator++();
Complex * operator++(int);
Complex * operator--();
Complex * operator--(int);
operator double() const;
friend ostream &operator<<(ostream*, const Complex&);
friend istream &operator>>(istream*, Complex&);
};
И я создал Complex.cpp, чтобы определить функцию:
#include "Complex.h"
using namespace std;
Complex::Complex(double a, double b)
{
this->_real = a;
this->_imag = b;
}
double Complex::getReal() const{...}
void Complex::setReal(double x){...}
double Complex::getImag() const{...}
Complex Complex::operator=(const Complex& other){...}
Complex * Complex::operator+(const Complex& other){...}
Complex * Complex::operator+(const double &other){...}
Complex * operator+(const double &first, const Complex &second){...}
Complex * Complex::operator++(){...}
Complex * Complex::operator++(int){...}
Complex * Complex::operator--(){...}
Complex * Complex::operator--(int){...}
Complex::operator double() const{...}
ostream &operator<<(ostream &output, const Complex &comp)
{
output << comp._real << " + " << comp._imag << "i";
return output;
}
istream &operator>>(istream &input, Complex &comp)
{
input >> comp._real >> comp._imag;
return input;
}
Это мой главный:
#include "Complex.h"
int main()
{
Complex com4(0,0);
cout << "Input Complex: ";
cin >> com4;
cout << com4 <<endl;
}