回答編集履歴
2
ちょっと文言修正
answer
CHANGED
@@ -30,6 +30,6 @@
|
|
30
30
|
|
31
31
|

|
32
32
|
|
33
|
-
epistemeさんの回答にあるような変数が重複していると言う話はこのメッセージには書いてありません。そのため、このメッセージを深く分析する必要があります。C++では`a[b]`という表現は`*(a+b)`と同じです。間接演算子`*`がありますので`a+b`は何からのポインタである必要があり、そのためには`a`と`b`はポインタ型と整数型の組合せで無ければなりません。メッセージは「`PAD_RIGHT`がポインター型でなければならないが整数型です」という意味です。ここから、`Pad`が整数型
|
33
|
+
epistemeさんの回答にあるような変数が重複していると言う話はこのメッセージには書いてありません。そのため、このメッセージを深く分析する必要があります。C++では`a[b]`という表現は`*(a+b)`と同じです。間接演算子`*`がありますので`a+b`は何からのポインタである必要があり、そのためには`a`と`b`はポインタ型と整数型の組合せで無ければなりません。メッセージは「`PAD_RIGHT`がポインター型でなければならないが整数型です」という意味です。ここから、`Pad`が整数型だと判断されていると推測できます。しかし、元々書こうとしたコードでは`Pad`はグローバルで配列として書いたはずなのでポインター型のはずです(配列はポインター型に暗黙に変換できる)。どこかで`Pad`を整数型としているところがあると推測されます。そうやって探していくとepistemeさんの解答にもあった`int Pad = 0;`に辿り着くと言うことです。
|
34
34
|
|
35
35
|
こういうエラーの時はだいたいこんな所に問題がある場合が多い、という経験から慣れている人も居ますが、そういうものだけに頼ると例外的なモノに出くわしたときに度ツボにはまる場合があります。なぜ、そのメッセージが出るのかを論理的に理解すること、そこから、本当に直すべき所がどこかを論理的に探っていくこと、それができなければ、**できるプログラマー**になるのは難しいでしょう。
|
1
誤字とか
answer
CHANGED
@@ -24,12 +24,12 @@
|
|
24
24
|
|
25
25
|
現象が確認できました。では、「赤い下線」の説明をしたいと思います。
|
26
26
|
|
27
|
-
Visual Stuidoのエディタでは、ソースコードに問題がある場合、どこに問題があるか一目でわかるように、問題部分に赤い下線を引くようになっています。下線部分の詳細はエラー一覧のエラーで確認できます。この機能は、IntelliSenseによって構文としてあり得ない、型や引数の不一致等の問題を検出したときにあらわれます。ほとんどの場合
|
27
|
+
Visual Stuidoのエディタでは、ソースコードに問題がある場合、どこに問題があるか一目でわかるように、問題部分に赤い下線を引くようになっています。下線部分の詳細はエラー一覧のエラーで確認できます。この機能は、IntelliSenseによって構文としてあり得ない、型や引数の不一致等の問題を検出したときにあらわれます。ほとんどの場合、IntellSenseで見つかった問題はコンパイル時にもエラーになりますが、エラーメッセージや内容は異なる場合があります。しかし、IntelliSenseは実際にコンパイルして確認しているわけでは無いため、問題ないという場所でもコンパイル時にエラーが起きる場合があります。他にも、IntelliSenseの設定とコンパイルの設定が不一致(C++のバージョンが違う等)ですと、IntelliSenseではエラー扱いでも、コンパイルは問題なくできると言うこともあります。
|
28
28
|
|
29
|
-
問題と判
|
29
|
+
問題と判定された理由はマウスカーソルを合わせると説明が表示されます。また「エラー一覧」にも書かれています。なお、問題の説明は直接的な対応方法が書いていることは少なく、大抵は期待する何かに対して別の何かになっているという表現です。その場合は、期待する何かになっていない理由を論理的に推測していく必要があります。例えば今回の場合、下記のようになっています。
|
30
30
|
|
31
31
|

|
32
32
|
|
33
|
-
epistemeさんの回答にあるような変数が重複していると言う話
|
33
|
+
epistemeさんの回答にあるような変数が重複していると言う話はこのメッセージには書いてありません。そのため、このメッセージを深く分析する必要があります。C++では`a[b]`という表現は`*(a+b)`と同じです。間接演算子`*`がありますので`a+b`は何からのポインタである必要があり、そのためには`a`と`b`はポインタ型と整数型の組合せで無ければなりません。メッセージは「`PAD_RIGHT`がポインター型でなければならないが整数型です」という意味です。ここから、`Pad`が整数型の判断されていると推測できます。しかし、元々書こうとしたコードでは`Pad`はグローバルで配列として書いたはずなのでポインター型のはずです(配列はポインター型に暗黙に変換できる)。どこかで`Pad`を整数型としているところがあると推測されます。そうやって探していくとepistemeさんの解答にもあった`int Pad = 0;`に辿り着くと言うことです。
|
34
34
|
|
35
35
|
こういうエラーの時はだいたいこんな所に問題がある場合が多い、という経験から慣れている人も居ますが、そういうものだけに頼ると例外的なモノに出くわしたときに度ツボにはまる場合があります。なぜ、そのメッセージが出るのかを論理的に理解すること、そこから、本当に直すべき所がどこかを論理的に探っていくこと、それができなければ、**できるプログラマー**になるのは難しいでしょう。
|