2016-09-23 18 views
-2

に 'のconstのchar *':種類の無効なオペランド 'のconstのchar [8]' とバイナリ「演算子+

FILE *fp; 
fp = fopen("client." + receiver->get_identifier().c_str() + ".vol", "a+"); 

receiver-> get_identifier()を返します文字列。しかし、タイトルに誤りがあります。私はhereという質問を読んだが、fopenの最初の引数はconst char *なので運がなかった。これをコンパイルするにはどうすればよいですか?

+0

[this](http://stackoverflow.com/questions/23936246/error-invalid-operands-of-types-const-char-35-and-const-char-2-to-binar)本当にちょうどタイプミスです。 '.c_str'を取り除き、()内のすべてをラップし、' .c_str() 'を使います。 – NathanOliver

答えて

3
receiver->get_identifier().c_str() 

のでoperator+は(それの1つの引数はstd::stringでなければならない)で蹴ることができない、const char*、ないstd::stringを返します。 c_str()を削除し、あなたが動作するconst char*プラスstd::string、およびoperator+を持っていると思いますので、これはトリック

fopen(("client." + receiver->get_identifier() + ".vol").c_str(), "a+"); 

に行う必要がありますstd::string::c_str()で終わりに変換します。

const char*operator+を定義できない理由がわかっているのは、C++では基本型の演算子のオーバーロードが許可されていないからです。少なくとも1つの引数はユーザ定義型でなければなりません。

2

これは、Cスタイルの文字列でstd::stringオブジェクトを追加which can be done、そして唯一の終わり(.c_str()経由)で文字ポインタを取る

(string("client.") + receiver->get_identifier() + ".vol").c_str() 

に最初の引数を変更してみてください。あなたのコードはCスタイルの文字列を追加しようとしますが、これは不可能です。

関連する問題