質問するログイン新規登録

回答編集履歴

1

おまけ

2015/09/29 07:15

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -11,4 +11,11 @@
11
11
  char * hoge;
12
12
  fgets(hoge,BUFF,stream);
13
13
  ```
14
- 変数`stream`の型が明示されていないため推測となりますが、もし`FILE*`型ならば変数`hoge`を配列型`char hoge[BUFF];`として宣言する必要があります。そうではなくC++の`std::istream`系列であれば、根本的な誤りがあります。
14
+ 変数`stream`の型が明示されていないため推測となりますが、もし`FILE*`型ならば変数`hoge`を配列型`char hoge[BUFF];`として宣言する必要があります。<del>そうではなくC++の`std::istream`系列であれば、根本的な誤りがあります。</del>
15
+
16
+ ---
17
+ おまけ:簡単ですがエラーメッセージの解説・理由も付けておきます。
18
+
19
+ > str=str(hoge); とすると
20
+ > ‘(std::string {aka std::basic_string<char>}) (char*&)’ への呼び出しが適合しない
21
+ 誤って書いた`str=str(hoge);`では、まず`=`の右辺`str(hoge)`が評価されます。C++言語の文法ではこの右辺を「変数`str`を関数オブジェクトとみなし、その引数に`hoge`を渡して呼び出す」部分式と解釈します。しかし実際には、変数`str`は関数オブジェクトでは無く`std::string`型、正式名は`std::basic_string<char>`型です。エラーメッセージの「呼び出しが適合しない」というのは、このような原因で出力されています。