【发布时间】:2019-11-03 09:15:09
【问题描述】:
我最近开始学习 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;
}
【问题讨论】:
-
ostream*->ostream&,istream*->istream& -
欢迎来到 Stack Overflow!请以tour 开头并阅读How to Ask。对于像您这样的问题,minimal reproducible example 也是强制性的。
-
呃……这些指针是怎么回事?查看标准复数类,了解方法签名应该是什么。
-
复杂 * operator++();所有这些代码行都编辑它们。它们应该是 Complex & operator++(); .他们应该返回参考。
-
感谢@tkausl,我不敢相信我犯了这个错误。这很尴尬
标签: c++ input overloading