「文字列」を受け入れてログに記録する小さな関数を作成しました。
void
IPC::bomb (char * msg) { /* etc */ }
それを呼び出すこのインスタンスはコンパイルされません:
bomb( __FUNCTION__": socket() call failed: " + strerror(errno));
診断:
./c/IPC.cpp:26: error: expected ')' before string constant
./c/IPC.cpp:26: error: invalid conversion from 'const char*' to 'char*'
引用符で囲まれたリテラル、std::string、char*、および const-ness をどのように扱うかについて、私は非常に混乱しています。上記の問題を解決するにはどうすればよいですか?そして、一般的に、文字列の連結、特にいくつかの経験則はありますか? char* と文字列を混在させるときは?
UPDATE 1 : 別の問題が発生している可能性があります: C プリプロセッサは次の展開を示します:
bomb( std::string(__FUNCTION__ ": socket() call failed: ") + strerror((*__errno_location ())));