我今天刚遇到一个问题:以下代码似乎在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或其他任何内容有关。
我知道如何将流传递给函数吗?
答案 0 :(得分:3)
我认为您的原始代码(您在原始问题中仅部分发布)看起来像这样:
#include <iosfwd>
void foo(std::fstream& file){
file << "foo";
}
int main() {
std::fstream dummy("dummy");
foo(dummy);
return 0;
}
实际上,这给出了clang ++ 3.2
的以下错误消息Compilation finished with errors:
source.cpp:4:10: error: invalid operands to binary expression ('std::fstream' (aka 'basic_fstream<char>') and 'const char [4]')
file << "foo";
~~~~ ^ ~~~~~
source.cpp:8:17: error: implicit instantiation of undefined template 'std::basic_fstream<char, std::char_traits<char> >'
std::fstream dummy("dummy");
^
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/iosfwd:118:11: note: template is declared here
class basic_fstream;
^
2 errors generated.
不幸的是,您只发布了第一条错误消息,但没有发布第二条错误消息。
从第二条错误消息中,很明显您只有#include <iosfwd>
而不是#include <fstream>
。如果你解决了这个问题,一切都会好的。
请在下次发布完整代码和所有错误消息。