ページ 11

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

Posted: 2014年6月07日(土) 02:09
by biginer
下記のプログラムを実行したところ ’’ '<' : 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();

}

 

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

Posted: 2014年6月07日(土) 08:25
by たいちう
パッと見ただけだけど、x+1で範囲外にアクセスしてませんか?

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

Posted: 2014年6月07日(土) 08:46
by みけCAT
signed と unsigned の数値を比較しようとしたからですね。
該当部分のxやyの型をunsigned intにすれば改善すると思います。

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

Posted: 2014年6月07日(土) 22:51
by biginer
たいちうさん、みけCAT さん、ありがとうございました。
無事解決することができました。周りに教えてくれるひとがいないため、大変助かりました。