【问题标题】:Streaming a const unsigned long to an fstream将 const unsigned long 流式传输到 fstream
【发布时间】: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 限定符,它会按预期工作,但我宁愿不这样做。

显示此问题的代码可见:

Error in motion ...

【问题讨论】:

    标签: c++ stream


    【解决方案1】:

    在测试代码时,它会给出您报告的错误。 我添加了#include &lt;fstream&gt;,一切正常。

    【讨论】:

    • 你最好是在开玩笑!
    • 我为此使用了 VS 2013,在一个非常小的程序中自己尝试一下。否则我不会发布它。
    • 对不起,当我发布该评论时,我只是在开玩笑-我应该包括一个笑脸! :-) 但是,我尝试添加该包含并且行为没有改变。但是,如果我删除函数上的强制转换声明它可以工作,但我宁愿正确解决它。我正在使用 MSDEV 2010,我的客户端还没有升级。
    • @Stefan 我没问题 :),我也在 GCC 和 Clang 中进行了测试,它们都有相同的行为,你可以在这里快速检查:coliru.stacked-crooked.com
    • 谢谢。我似乎不再能够访问该页面,但我已经举了一个例子来显示我遇到的问题。它在coliru.stacked-crooked.com/a/90b0da017bef09f4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2012-02-06
    • 2016-07-29
    • 2013-08-01
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多