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