• ベストアンサー

何故か解決致しました。

何故か解決致しました。 いつも、解決する時は、エラー箇所を 全く同様に打ち直したらコンパイルできるのです。 本当に不思議です。 こんな経験はないですか? 原因はなんでしょうか? もし推測できる方がいらっしゃったらアドバイスをください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

厳しい意見が多いようですが、全部にちゃんとお礼言ってるあたりは、関心します。 私見ですが、プログラムを開発する作業において、コンパイラやリンカの出力するエラーの再現性が悪く、コンパイルする度に結果が異なるということは、非常にまれなケースだと思います。つまり、同じソースをコンパイルすると同じエラー結果が得られるということです。他の回答者さんは、みな同様な意見のように思えます。大抵の場合、不思議な事は無く、結果としてしごく当然で、ほとんどの場合、自分が悪いですね・・・。 とはいえ、僕も子供の頃に、雑誌(ベーマガとか)に載ってるソースコードを手入力し、わけのわからないエラーが消せず、丸々打ち直したというような経験があります。ちょうど、offikouさんの様な感じですね。でも、まぁ・・・この辺は経験をつめば理解できますので。みなさんの言うように、エラーメッセージを訳して、コンパイラのヤツは何を言ってんだ?ってあたりをつぶしていくといいでしょう。 非常に稀とはいいましたが、グループでプログラムを組んでいる際、ある人の編集が原因で自分のファイルがコンパイルできなくなったり、といったことは多々あります。1時間前はコンパイルできたのに・・・という感じ。でも、そういう仕事をする頃には、エラーメッセージも、サクサク理解できるようになってます。offikouさんのケースでは無いですが、こういうこともあるっていう蛇足でした。

offikou
質問者

お礼

ご回答ありがとうございます。 普段は違う行にエラーを指摘する事が多いと思うのですが、今回は誤りの行をまさに指摘しているのにも関わらず、気付きませんでした。 言い訳ですが、今回は一番悪い見落とし方だと思います。 私は文系の出身であまりコンピュータの仕事の経験がなく、書籍にとっつきにくいのですが、いつもエラーメッセージを検索したり、本を遡ったり、違う書籍を見たり、自分ではその時は限界まで考えたつもりで、人に頼っています。 それでもやはり自分の努力が足りませんでした。 暫く、自学してから投稿致します。 その際は、どうぞ宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

回答No.8

おそらく、リターンを押す位置が変わったりスペース等が半角全角の切り替えができていたり、  漢字のコードと符合類のコードとかのぶつかり合いとかが私の時代にはありました。いつもエラーの出る箇所のソースプログラムの説明箇所を削除したら治ったこともありました。(たまたまかも)。

offikou
質問者

お礼

ご回答ありがとうございました。 今回は、分かりやすい入力ミスに気付きませんでした。 以前お世話になった会社でBORLAND社のDBASEを教わって、大変業務が効率化されました。 しかし、LinuxやC言語はまた別物です。 一歩一歩、理解して慣れていければと思います。 まだ始めたばかりなので、自分の経験でリズムを掴めるようがんばります。 多くのアドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.6

いいですか。 前回のプログラムは 18行目: for(i = 0; < KAMOKU;i++) 27行目: for(i = 0; < KAMOKU;i++) が明らかな間違いで、 for.c:18: error: expected expression before ‘<’ token for.c:27: error: expected expression before ‘<’ token とコンパイラも18行目と27行目がエラーだと言っているのです。 この意味も調べずに、ただ入力しなおしたら動いた、というのは、プログラムの勉強ではなく、キーボード操作の練習にしかなってないんです。 しかも、原因を「全角で入力」などと的はずれなこと言っているようでは、また同じ間違いを犯す、ということです。 まずは、エラーメッセージはちゃんと読んでください。英語がわからなかったら、辞書で調べてください。最近はネットで翻訳もできます。比喩等といった文学的表現は使われていないので、小説を原語で読むのに比べれば非常に簡単です。 C言語では、言語の性質上、エラーメッセージの出る箇所と実際の間違いが一致しないこともあります。(括弧の対応間違いとか) しかし、今回は「before '<' ( '<'の前 )」と、エラーメッセージのでた箇所と、間違いの箇所が一致している、とても修正しやすいものです。 > こんな経験はないですか? > 原因はなんでしょうか? 人間は間違います。 同じに入力したつもりでも、キーを2回叩いてしまったり、となりを押してしまったり、順番がいれかわったり.... そして、人間の脳は、目や耳から入った情報に、無意識のうちにフィルタをかけてしまいます。今のあなたのように、「全く同様に打ち直した」と思って見ると、違いを見落しやすくなります。 そこで、機械の力を借りるのです。 エラーメッセージは、間違いを指摘してくれます。 diffツールは、人間が見落すようなファイルの差分を確実に探してくれます。 デバッガを使ったり、経過を表示させたりして、計算やアルゴリズムに間違いが無いかチェックします。 ソフトウェアテストで仕様通りに動作しているか確認します 熟練プログラマでさえ、そうやってチェックしなければ正しいプログラムを作れません。 ましてや、まだ10日の初心者なら、間違いが絶対ある、というつもりでいないと。 エラーメッセージの内容や、間違いのあるプログラムと正しいプログラムとの違いから、自分がどこを間違えたのかを確認して、自分がどこが理解できてないのかを知る、というのは、プログラム言語の学習にとても有用です。

offikou
質問者

お礼

分かりました。 少しずつでも上達する様に、地道にやっていきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.5

> 今回は見落としていたのかも知れません。 あのね、前回のあなたの質問の中の、プログラムコードで、何が間違っているかは、あなたに回答した人たち、すべてわかっているんですよ。「かも知れません」ではなくて、まちがいなくあなたは間違っているんです。 ではなぜ「ここが間違っている」という指摘を、だれもしなかったかというと、あなた自身が自力で見つけ出さないと、あなたのためにならなかいからです。

offikou
質問者

お礼

おっしゃる通りでした。 打ち直して正常にコンパイラできた時は、 多分、全角が混ざっていたのではないかと思います。 今後気をつけます。

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

「自分を徹底的に疑え」「エラーメッセージは良く読んで意味を考えろ」だけでなく「わからないものはまず調べてみる」ってのも必要ですよ。 文脈から多少は判断できると思いますが、二つ(以上)のファイルの差分を取るdiffというツール及びその派生ツールがあります。 「コンパイルが通らないコード」を保管しておいて、「打ち直してコンパイルが通るようになったコード」とセットでこのツールにかけるとなんらかの差分が必ず出るでしょう。 WindowsならDFとかWinMerge辺りが定番です。

offikou
質問者

お礼

ご指導ありがとうございます。 ただ、diff辺りから以降の文章はまだ理解できません。 初めて10日間ほどしか経っていないのです。 後で調べてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

「全く同様に打ち直した」と本人は思っていても実情は違う、という事です。 コンパイルエラーの出るコードと出ないコードをdiffで比較してみれば一目瞭然でしょう。 というか、エラーメッセージを見ない=エラー原因を全く考えずにただ本の通りに打ち直していては全く上達しませんよ?

offikou
質問者

お礼

ありがとうございます。 上達する様に心を改めます。 あと、diffで比較する、とはどうする事なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

前の質問では明らかに i を書き忘れていますが単純な見落としではないでしょうか

offikou
質問者

お礼

ご指摘ありがとうございます。 でも、目を皿の様にして見ても、間違っていないのに、今まで何度も同じ言語を書き直したらコンパイラできたというケースが多いのです。 今回は見落としていたのかも知れません。

全文を見る
すると、全ての回答が全文表示されます。
noname#119360
noname#119360
回答No.1

全角文字が紛れ込んでいたとかでしょうか?全角スペースあたりがくさいですが、コンパイルエラーで発見しやすいですよね。 コンパイルエラーなしなのに動作が変というのでデバッグトレースしたらcase文内の、default: のスペルミスでラベル扱いされてデフォルトケース処理が実行されていないことがありました。 ご参考までに。

offikou
質問者

お礼

ありがとうございます。 実はまだ始めたばかりで、お書きになっている意味がよく分かっていないのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • __ashrdi3は未解決です。

    現在、Platform Builderをいうコンパイラを使って、 プログラムを作っています。 コンパイル時に、 リンクエラー、__ashrdi3は未解決です。 というエラーが出ます。 __ashrdi3が何なのかもわかりません。 何かライブラリをリンクしなければいけないのかと思い、 いろいろ検索したのですが、情報が少なくよくわかりません。 どなたかどうぞご教授くださると有難いです。

  • 「外部シンボル "_DirectDrawCreate@12" は未解決」って???

    外国のサイトで拾ってきたVisual C++のソースコードをコンパイルしたら 次のようなエラーが出ました。 --------------------------------- (1) test.obj : error LNK2001: 外部シンボル "_DirectDrawCreate@12" は未解決です (2) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です (3) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です (4) Debug/prog.exe : fatal error LNK1120: 外部参照 3 が未解決です。 (5) link.exe の実行エラー --------------------------------- 特に、(1)~(3) の意味がよく分かりません。 Readmeを見ると、「コンパイルすればいい」としか書いてないのですが、、、 もし原因がわかったらお願いします。

  • 重複エラーを解決するには

    こんにちは。 次のようなエラーが出て困っています。 ”パッケージ名.Canvasクラスの定義が重複しています。  すでにCanvas.javaと○.javaで定義されています。” そこで、 1,現在コンパイルしているファイルで、Canvas.java   と○.javaでの定義が重複しているのかを確認しました。   しかし、その二つのファイルが、現在コンパイルしているファイル自身でした。 2,Canvas.javaと○.javaのプログラムの中身を見ました。   しかし、Canvasクラスを定義していたのは片方だけでした。 3,このエラーが出るようになる前に行った作業(一度、Canvas.javaを削除して   再び作成し直した)ことが原因で、どこかにbackupfileが作成されてしまった。 →解決できず JBuilderを使っています。どうしたら解決できるのか、教えて下さい。お願いします。

    • ベストアンサー
    • Java
  • シンボルを解決できません(初心者)

    一つのプログラムに対して、いくつかのファイルに分けて 記述されているとき、 たとえば、ファイル A.java と B.java があって 【A.java】 package shop;  ・  ・  public class Shop {   ・   ・   ・ } 【B.java】 packeage shop;  ・  ・ public class Buy(Shop shop){ } という感じで、A.java内で定義したクラス型を他のファイルで使うと、 コンパイル時に、「シンボルを解決できません」というコンパイルエラーが出て コンパイルできません。 こういう場合はどうすれば、良いのでしょうか? 初心者なので、非常に初歩的な質問かと思いますがよろしくお願いします。

    • ベストアンサー
    • Java
  • BinaryFileReader型に解決できない

    現在eclipseでjavaをやってみています。 バイナリファイルの書き込みというのをやってみたくて、次のサイトの バイナリファイル書き込みサンプル http://www.ra13.org/java/BinaryFileWriter.html こちらのjavaのコードをいれてみてコンパイルしてみたところ、 BinaryFileReader reader = new BinaryFileReader(); byte[][] bytess = reader.read(); BinaryFileWriter writer = new BinaryFileWriter(); これらのコードのBinaryFileReaderのところでエラーがでて ”BinaryFileReaderを型に解決できませんでした” というエラーが出力されました。 これはどのように解決すれば良いかご教授いただきますようお願いいたします。

    • ベストアンサー
    • Java
  • 誰も解決策はわからないかもしれないけど疑問があります。

    誰も解決策はわからないかもしれないけど疑問があります。 visual studio 2008 express edtionを利用しています。その中でもc++をつかってGPGPU計算をやってみたいと思うようになり、グラフィックカードなどを買ってきて試しています。32bitOSのwindows vista sp2をつあっていますが、sample SDKに付属していたデモを試すとうまく動きません。 コンパイルする必要があると思って、プロジェクトファイルからvisual studio c++ express edtionを呼び出して、コンパイルさせました。いくつかのライブラリやインクルードファイルの場所指定をする必要があって、紆余屈折した挙句にコンパイルすることが出来そうになりました。 いざ、コンパイルを試みると…CUDAのソースがコンパイルできません。どうやら日本語名のユーザーホームディレクトリ以下にtempファイルを作成しようとして失敗しているようです。 日本語だからだめなのかとおもって、英語名のアカウントでやるとすんなりコンパイル出来ちゃいました。 さて、やっと質問です。日本語名だとvisual studio 2008とcudaライブラリーでのコンパイルには問題がでるのでしょうか?解決策はtempディレクトリを別のフォルダに指定することで回避できると思うのですが、皆さんはそうしているのでしょうか? 使用経験のある技術者の方からの返事をお待ちしています。 よろしくお願いいたします。

  • 問題の解決力の付け方

    いつもお世話になっています。 皆さんは、問題の解決力をどのようにして付けているのでしょうか。 たとえば、運用の方は、多分問題が発生したとき、プログラムなどを見ずに、全体的な動作などから問題の原因と解決方法を見つけていると思います。 自分はわからないことがあると、すぐハマッテしまうので、問題の解決力がほしいと思っています。 皆さんが普段、問題の解決力をつけるためにどのようなことを行っているのか教えて頂けないでしょうか。 (このような質問がここのカテゴリでなかったらすみません。)

  • java return文を指定できません。

    javaプログラミングのコンパイルエラーで、return文を指定できません。 を出てしまいます。いろんなことを試してのですがエラーを解決することができません。このエラーが出る原因として考えられることがあればどんな 些細なことでもかまいませんのでぜひ教えてください。お願いします。

  • エラーメッセージを解決したいです

    パソコン起動時に、以下のようなエラーメッセージが出るようになりました。 Trend Micro Anti-Malware Solution Platformは動作しなくなったため、閉じられました。 問題が発生したたえ、アプリケーションは正しく動作しなくなりました。解決策がある場合はWindowsから通知されます。 というものです。当方で何か原因を作ってしまったのかもしれませんが、自力で解決することができません。お分かりになる方がいらっしゃいましたら、どうぞ宜しくお願い致します。

  • 外部シンボルの未解決のエラー

     今日ずっとタイトルのエラーの解決を探してたんですが,なかなかうまくいきません.助けていただきたいです.よろしくお願いします.   VC++2008を使ってます.エラーは, ――――― エラー 2 error LNK2001: 外部シンボル ""public: void __thiscall Sequence::Game::Parent::SetSeqID(enum Sequence::Game::Parent::Seq)" (?SetSeqID@Parent@Game@Sequence@@QAEXW4Seq@123@@Z)" は未解決です。 Load.obj ――――― エラー 9 error LNK2019: 未解決の外部シンボル "public: __thiscall Sequence::Game::Parent::Parent(int)" (??0Parent@Game@Sequence@@QAE@H@Z) が関数 "public: void __thiscall Sequence::Parent::Update(void)" (?Update@Parent@Sequence@@QAEXXZ) で参照されました。 Parent.obj という類の2種類のエラーが全部で10個ほどと「外部参照○が未解決です」というものです. Parent.cppというものは  Sequence/Parent.cpp Sequence/Game/Parent.cpp と2種類あります.  ちゃんとSequence/Game/Parent.cppにこのヘッダで宣言したものの定義をかいているんですが, このcppのソースを全部消したり,エラーになるようなことを書いてビルドしても 同じエラーが同じだけでてしまうので, 恐らく,このソースをうまく一緒にコンパイルできてないのだと思います というところまで 今日調べてわかりました. ちゃんとプロジェクトの中には入ってますし,フォルダ構成も間違ってないと思うんですが,リビルトしてみると Parent.cpp が一回しかコンパイルされてません. このエラーの一歩前の段階は Sequence/Parent.cpp に関しての外部シンボルの未解決エラーでした.  解決策をいただきたいです.よろしくお願いします.

このQ&Aのポイント
  • 5、6年前に統合失調症の診断を受けましたが、今は薬を飲んだり飲まなかったりしています。
  • 飲んだり飲まなかったりが一番よくないと聞いたことがありますが、どうなのでしょうか。
  • 医師には薬を飲むように言われていますが、統合失調症か疑っていることや薬の副作用への懸念があり、飲むのに躊躇しています。
回答を見る