Problems with ostream
Problems with ostream
我正在C++中实现一个Big Integer,并尝试将cout与我的BigInt类一起使用。我已经使<lt;运算符,但在某些情况下不起作用。
这是我的代码:
inline std::ostream& operator << (ostream &stream, BigInt &B){
if (!B.getSign()){
stream << '-';
}
stream << B.getNumber();
return stream;
}
上面的代码适用于:
c = a + b;
cout << c << endl;
但失败:
cout << a + b << endl;
在第一种情况下,程序运行良好,但在第二种情况下编译器给出了一个错误:
main.cc: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
有可能使<lt;函数的运算符?
方法:
string getNumber ();
bool getSign ();
string BigInt::getNumber (){
return this->number;
}
bool BigInt::getSign (){
return this->sign;
}
正如chris在评论中很快(像往常一样)指出的那样,您在这里创建了一个临时的:
cout << a + b << endl;
不能将其绑定到非常数引用。您需要通过在引用中添加const关键字来更改运算符重载的签名。
这段代码对我来说是一个伪BigInt实现(因为你还没有分享你的):
#include <iostream>
using namespace std;
class BigInt
{
public:
bool getSign() const { return true; }
int getNumber() const { return 0; }
const BigInt operator+(const BigInt &other) const {}
};
inline std::ostream& operator << (ostream &stream, const BigInt &B){
// ^^^^^
if (!B.getSign()){
stream << '-';
}
stream << B.getNumber();
return stream;
}
int main()
{
BigInt a, b, c;
c = a + b;
cout << c << endl;
cout << a + b << endl;
return 0;
}
但是,是的,我同意在这种特殊情况下,错误消息并不是不言自明的。
更改
inline std::ostream& operator << (ostream &stream, BigInt &B){
至
inline std::ostream& operator << (ostream &stream, BigInt const& B){
c
可以用于预期BiInt&
的情况,但a+b
不能使用,因为a+b
是临时的。但它可以用于预期BigInt const&
的地方。
相关文章:
- ostream过载时的缓冲区冲洗
- Problems with std::cin.fail()
- 需要从 istream 和 ostream 派生 iostream
- "ostream &os"有什么用?
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- std::adjacent_difference with std::chrono time_point
- C++表达SFINAE和ostream操纵器
- DLL Made with CMake 使程序崩溃
- Problems with ostream