回答編集履歴

1

おまけ

2015/09/29 07:15

投稿

yohhoy
yohhoy

スコア6191

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