c++中重载输入运算符的问题
Problem with overloading input operator in c++
我最近开始学习C++,遇到了使用重载输入运算符的问题>gt;。
我正在写一个描述复数的类。我的问题是:如果我把main((放在Complex.cpp中,我的程序就会正常运行。但如果我创建了一个新的文件main.cpp并将main((放在那里,我就会出错。
错误:二进制表达式("st::istream"(又名"basic_stream"(和"Complex"(的操作数无效
候选函数不可行:第一个参数没有从"std::istream"(又名"basic_stream"(到"std:"istream*(又名"asic_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;
}
您用指针声明了io运算符(这是错误的(
friend ostream &operator<<(ostream*, const Complex&);
friend istream &operator>>(istream*, Complex&);
但是参考文献正确地实现了它。
friend ostream &operator<<(ostream&, const Complex&) {...}
friend istream &operator>>(istream&, Complex&) {...}
当您在Complex.cpp中有main()
时,编译器可以看到那些正确的实现(没有在任何头中定义(。
如果您在其他地方有main()
,编译器只能看到标头中的声明,这些声明具有错误的签名。
解决方案是修复头中operator<<
和operator>>
的声明,使它们与实现匹配。
请注意,正如评论中已经提到的:您的其他操作员重载应该返回
Complex &
或Complex
,而不是Complex *
。看看std::complex或这个页面,详细介绍运算符重载,看看规范实现是什么样子的。相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 运算符继承和 cpp 核心准则 c.128 的问题
- 在C++中使用重载提取运算符时出现问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 关于条件块的问题与&&运算符有关
- 重载运算符与添加问题
- 加、乘、除、减复数的问题 C++ - 运算符重载
- 我需要这方面的帮助C++在使用逻辑运算符时是/否问题
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 如何解决不明确的运算符过载问题?
- 屏幕插入运算符<<的运算符过载问题
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 用户定义的文本运算符(在原始模式下)存在问题
- 关于重载 -> 运算符中 const 关键字的特定位置的问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- constexpr 运算符重载使用参数的问题
- c++中重载输入运算符的问题
- 有趣的问题运算符重载