【发布时间】:2013-01-24 20:39:30
【问题描述】:
我今天刚刚遇到一个问题:以下代码似乎在 MSVC++ 2010 中有效,但不适用于 Clang LLVM 4.1(使用 GNU++11)。
#include <fstream>
void foo(std::fstream& file){
file << "foo";
}
int main() {
std::fstream dummy("dummy");
foo(dummy);
return 0;
}
生成
Invalid operands to binary expression (std::fstream (aka basic_fstream<char>) and const char[4])
关于 Clang。我认为通过引用传递 iostream 参数将是 C++ 中的常见做法。我什至不确定这是否与 clang、C++11 或其他任何东西有关。
知道如何将流传递给函数吗?
【问题讨论】:
-
代码正确。 Check it here 为自己使用 clang++ 3.2。
-
您是否缺少
#include <fstream>?如果没有,请发布完整的SSCCE。 -
您可以
#include <iosfwd>允许您使用指针和引用,但不能真正使用对象。此外,对于流,请改为传递基类。另一个问题:这是否打算作为要写入的流?如果是,则使用std::ostream& out作为参数。如果它也应该被阅读,那么使用std::iostream& stream。仅当您需要特定于文件流的内容时,才使用代码中的表单。 -
@ildjarn 是的,我包含了
并相应地编辑了源代码。 -
@doomster 哦,你是对的。 'std::ostream& out' 在那里编译得非常完美。我仍然不明白为什么,但确实如此。如果您将评论移至答案中,我会接受。