• ベストアンサー

エラーを探しきれません

ビルドをすると表示されるエラー文です。(ファイルパス省略有) C:\…\Z\4.c(4) : error C2087: '<Unknown>' : 添字が不正です。 C:\…\Z\4.c(9) : error C2059: 構文エラー : ';' C:\…\Z\4.c(11) : error C2059: 構文エラー : ';' C:\…\Z\4.c(11) : error C2143: 構文エラー : ';' が ')' の前に必要です。 C:\…\Z\4.c(12) : error C2059: 構文エラー : ';' C:\…\Z\4.c(12) : error C2143: 構文エラー : ';' が ')' の前に必要です。 C:\…\Z\4.c(15) : error C2059: 構文エラー : '}' C:\…\Z\4.c(54) : error C2059: 構文エラー : '}' cl.exe の実行エラー 以下はエラーの多い最初から20行までのコピーです。 #include "params.h" /*ヒストグラムを画像化する(ただしLEVEL/HIST_X_SIZE=1または2の場合のみ)*/ histimage(hist,image_hist) long hist[LEVEL]; /*ヒストグラムLEVELは濃度レベル数(8bitでは256)*/ unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ { int i,j,k,max,ratio,range; long n; float d; ratio=LEVEL/HIST_X_SIZE; range=HIST_Y_SIZE-5; for(i=0;i<HIST_Y_SIZE;i++){ for(j=0;j<HIST_X_SIZE;j++){ image_hist[i][j]=LOW; } } switch(ratio){ case 1:max=0; for(i=0;i<LEVEL;i++){ n=hist[i]; if(n<max)max=n; } 確認しても";"や"}"のミスがないと思うのです。 半角、全角ミスをなくすために一度全部打ち直してもまったく同じエラーでした。 このソースは「C言語で学ぶ実践画像処理」のサンプルを写したものです。 vc++ で作業しています。 何かお気づきの点等ありましたら指摘お願いします。

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

  • ベストアンサー
  • alphion
  • ベストアンサー率19% (27/136)
回答No.4

params.hの中身がわからないので、適当に以下のように記述したところ、コンパイルは通りましたが…(VC++) #define LEVEL 1000 #define HIST_X_SIZE 10 #define HIST_Y_SIZE 10 #define LOW 10 void histimage(long hist[LEVEL],unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]) { int i,j,k,max,ratio,range; long n; float d; ratio=LEVEL/HIST_X_SIZE; range=HIST_Y_SIZE-5; for(i=0;i<HIST_Y_SIZE;i++){ for(j=0;j<HIST_X_SIZE;j++){ image_hist[i][j]=LOW; } } switch(ratio){ case 1:max=0; for(i=0;i<LEVEL;i++){ n=hist[i]; if(n<max)max=n; } } }

bananapafe
質問者

お礼

ありがとうございます。 無事、コンパイルすることができました! 本の中のソースをそのまま写しても使えないように文を解体しているのでしょうか…。 とにかくまだ勉強不足でそれすらも気づかなかったのですが…。 ありがとうございました。

その他の回答 (4)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5

>unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ HIST_Y_SIZEとHIST_X_SIZEの#defineでの定義、行の最後にセミコロン書いてませんか?

bananapafe
質問者

お礼

お返事ありがとうございます。 別ファイルのparams.hでの記述で#defineの定義にセミコロンはありませんでした。 どうやら、本を写しただけのソースだったので それだけでは使用できないように解体されていたようです。 関数の定義で正しいはずの部分がエラーとして検出されるのは困りますが 私の勉強不足ゆえ、もっと勉強していきたいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

histimage(hist,image_hist) long hist[LEVEL]; /*ヒストグラムLEVELは濃度レベル数(8bitでは256)*/ unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ を histimage(long hist[LEVEL],unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]) にしてみたらどうでしょう

bananapafe
質問者

お礼

お返事ありがとうございます。 こちらの方法でも試させていただいたのですがやはり無理でした。 ちなみに、今、ふたつめのfor文の{}があってもなくてもいいと思ったので抜いてみたところ 15行目の'}'のエラーが16行目の'switch'のエラーに変わりました。 原因はやっぱりわからないのですが…

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

histimage(hist,image_hist) long hist[LEVEL]; /*ヒストグラムLEVELは濃度レベル数(8bitでは256)*/ unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ { この部分を histimage(hist,image_hist){ long hist[LEVEL]; /*ヒストグラムLEVELは濃度レベル数(8bitでは256)*/ unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ とするか、 long hist[LEVEL]; /*ヒストグラムLEVELは濃度レベル数(8bitでは256)*/ unsigned char image_hist[HIST_Y_SIZE][HIST_X_SIZE]; /*出力画像配列*/ histimage(hist,image_hist) { とする。

bananapafe
質問者

お礼

お返事ありがとうございます。 両方の方法を試してみたのですが、やはりだめでした。 本に載っているプログラムは未完成?(少し手を加えないとだめ)だと 友人から聞いたので、それが原因なのでしょうか…。

  • alphion
  • ベストアンサー率19% (27/136)
回答No.1

>添字が不正です ということなので、 LEVEL HIST_Y_SIZE HIST_X_SIZE などが定義されていないのでは? >構文エラー : ';' は、最初のエラーの影響だと思います。

bananapafe
質問者

お礼

早速のお返事ありがとうございます。 LEVEL HIST_Y_SIZE HIST_X_SIZE の定義は頭にある#include "params.h"の中で定義してあるのでこれが原因ではないと思われます。