エラー: : signed と unsigned の数値を比較しようとしました

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
biginer

エラー: : signed と unsigned の数値を比較しようとしました

#1

投稿記事 by biginer » 5年前

下記のプログラムを実行したところ ’’ '<' : signed と unsigned の数値を比較しようとしました。’’とエラーが出て止まってしまいます。
これはなぜでしょうか?どうやらfor(int y=0 ; y < V.size()-1 ; y++){などで止まっているらしいのですが。
ご指導お願いいたします。



コード:

 
IplImage *I;//入力画像
GLuint tex; //入力画像のテクスチャID
void display();

//2次元頂点クラス//
class v2d{
public:
	
	float x, y ;
	v2d() : x(0), y(0) {}
	v2d(float a, float b ) : x(a), y(b){}	
	void glVertex() {glVertex2f(x,y);}
	void glTexCoord(){ glTexCoord2f(x/ float(I->width),y/float(I->height)); }
};

//メッシュのメモリ確保と作成
#define GS 20 
vector<vector<v2d>> V , R;
	void createMesh(){
	for(int y=0;y<I->height + GS-1 ;y+=GS){
		V.resize(V.size()+1);
		for(int x = 0; x<I->width+GS-1; x+=GS) {V.back().push_back(v2d(x,y));}
		cout << V.back().size() << endl;

	}
	R=V;
}


int main(int argc, char *argv[]){
	
	//画像表示 
	I= cvLoadImage("lena-std.tif",1);
	cvNamedWindow("画像表示");//ウィンドウ作成
    cvShowImage("画像表示",I);//画像表示
	cvWaitKey(0);//待機

	

	if((I=cvLoadImage("lena-std.tif",-1))==0) abort();
	cvCvtColor(I,I,CV_BGR2RGB);


	//OpenGLの初期設定
	glutInit(&argc,argv);//glutの初期化
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
	glutInitWindowPosition(0,0);
	glutInitWindowSize(I->width,I->height);
	glutCreateWindow("インタラクティブな画像表現");
	glutDisplayFunc(display);
	glutMouseFunc(mouse);
	gluOrtho2D(0,I->width,I->height,0);

	glEnable(GL_TEXTURE_2D);
	glGenTextures(1,&tex);
	glBindTexture(GL_TEXTURE_2D,tex);
	gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,I->width,I->height,GL_RGB,GL_UNSIGNED_BYTE,I->imageData);

	createMesh();
	glutMainLoop();
 return 0;
}



/////メッシュを描くdisplay関数//////
void display(){
	glClearColor(1,1,1,1);
	glClear(GL_COLOR_BUFFER_BIT);

	//メッシュを描写
	glEnable(GL_TEXTURE_2D);
	glColor3f(1,1,1);
	for(int y=0 ; y < V.size()-1 ; y++){
			glBegin(GL_QUAD_STRIP);
			for(int x=0 ; x<V[y].size();x++){
				V[y+1][x].glTexCoord();R[y+1][x].glVertex();
				V[y  ][x].glTexCoord();R[y  ][x].glVertex();

			}
			glEnd();

	    }
	//メッシュのグリッド線を描画
	glDisable(GL_TEXTURE_2D);
	glColor3f(1,0,0);
	glBegin(GL_LINES);
		for(int y=0;y<V.size()-1;y++){
			for(int x=0;x<V[y].size();x++){
				R[y][x].glVertex();R[y  ][x+1].glVertex();
				R[y][x].glVertex();R[y+1][x  ].glVertex();
			}
		}
		glEnd();

	glFlush();

}

 

たいちう
記事: 418
登録日時: 9年前

Re: エラー: : signed と unsigned の数値を比較しようとしました

#2

投稿記事 by たいちう » 5年前

パッと見ただけだけど、x+1で範囲外にアクセスしてませんか?

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: エラー: : signed と unsigned の数値を比較しようとしました

#3

投稿記事 by みけCAT » 5年前

signed と unsigned の数値を比較しようとしたからですね。
該当部分のxやyの型をunsigned intにすれば改善すると思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

biginer

Re: エラー: : signed と unsigned の数値を比較しようとしました

#4

投稿記事 by biginer » 5年前

たいちうさん、みけCAT さん、ありがとうございました。
無事解決することができました。周りに教えてくれるひとがいないため、大変助かりました。

閉鎖

“C言語何でも質問掲示板” へ戻る