【发布时间】:2013-11-13 16:22:28
【问题描述】:
我正在用 std 类和算法替换一些遗留代码,并正在替换一个旧文件类。
obj 有一个无符号长成员 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 限定符,它会按预期工作,但我宁愿不这样做。
显示此问题的代码可见:
【问题讨论】: