我正在用 std 类和算法替换一些遗留代码,并正在替换一个旧文件类。
obj 有一个 unsigned long 成员 myUL
inline std::fstream& operator <<(std::fstream& rwf, const obj var)
{
rwf << var.myUL;
return rwf;
}
这不会编译,但我对为什么会冻结!错误消息抱怨它“在尝试匹配参数列表'(std :: fstream,unsigned long)'时找不到重载”
我努力了
inline std::fstream& operator <<(std::fstream& rwf, const obj var)
{
unsigned long ul = var.myUL;
rwf << ul;
return rwf;
}
但这也失败了(我认为通过非 const unsigned long 可能会有所帮助,因为 const_casting 它是无效的)。
但是当我在我的测试程序中使用它时,fstream 对 unsigned longs 有一个重载。我猜这个问题与类的 const 有关,但是 const_casting 类失败并显示以下消息:
转换需要构造函数或用户定义的转换运算符,const_cast 或 reinterpret_cast 不能使用
如果可能的话,我宁愿这样做而不修改该类代码。
针对以下问题,非常好,答案 - 我尝试了同样的方法并添加了 #include 行,但它没有帮助。
如果我删除函数中的 const 限定符,它会按预期工作,但我宁愿不这样做。
可以在以下位置查看显示此问题的代码: