2012-07-02 42 views
1

l SDL_BlitSurface(tileSheets.at(sheet),& clip [tile],screen,& tileBox);在SDL_blitsurface中使用SDL_Rect向量时,出现C++运行时错误

工作得很好,我initiliaze剪辑这样的:

clip[ 0 ].x = x; 
clip[ 0 ].y = y; 
clip[ 0 ].w = 48; 
clip[ 0 ].h = 48; 
x += 48; 
clip[ 1 ].x = x; 
clip[ 1 ].y = y; 
clip[ 1 ].w = 48; 
clip[ 1 ].h = 48; 

在所有

SDL_BlitSurface(tileSheets.at(sheet), &clip.at(tile), screen, &tileBox); 

然而,这不工作我用来初始化他们是这样的:

for(int i = 0; i < number; i++) 
    { 
     SDL_Rect clipBox = {x,y,48,48}; 
     clip.push_back(clipBox); 
    } 

这是我得到的错误:http://imageshack.us/photo/my-images/836/83468944.png/

任何线索?

+1

好像你正在过多索引阵列('在()'抛出excaption当索引超出范围,'[]'上相同的索引是未定义的行为) - 当你调用集合上的'push_back()'时,确保你的'tile'在0和'number-1'(包含范围)内 – Attila

回答

0

不知道变量剪辑的类型,但它可能是因为您要将堆栈中的变量推送到向量,所以一旦退出for循环的范围,它们就会变为无效。

+0

,它创建了传递对象的副本,所以scope不是这里的一个问题 - 如果是的话,'[]'将会失败以及'at()' – Attila

+0

这取决于剪辑的类型。如果它是存储引用的矢量,则不会创建副本。 – Jari

+0

这是我如何创建它们(不是两个在同一时间): 载体剪辑; SDL_Rect clip [2]; – Tallkotten

0

尝试其中之一:

/* 1) */ SDL_Rect clipBox(x,y,48,48); 
/* 2) */ clip.push_back(SDL_Rect(x,y,48,48)); 
相关问题