0

今日問題が発生しました。次のコードは 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])

クランで。C++ では iostream 引数を参照渡しするのが一般的だと思いました。これがclang、C++ 11、またはその他に関連しているかどうかさえわかりません。

ストリームを関数に渡す方法はありますか?

4

1 に答える 1

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.

残念ながら、最初のエラー メッセージのみを投稿しましたが、2 番目のエラー メッセージは投稿しませんでした。

2 番目のエラー メッセージから、 だけ#include <iosfwd>でなく#include <fstream>. それを修正すれば、すべてがOKになります。

次回は、完全なコードとすべてのエラー メッセージの両方を投稿してください。

于 2013-01-25T09:24:45.377 に答える