比较两种SDL_Rect类型

时间:2014-03-09 23:43:04

标签: c++ sdl

在我的SDL c ++程序中,我试图比较两个SDL_Rects,但'=='运算符给我错误

我已经定义了一个SDL_Rect类型的newRects数组来显示一个矩形网格并对其进行初始化。它工作正常

  

SDL_Rect newRects [Max_Rows] [Max_Columns];

现在我想看看在我的矩形网格中,如果有一个黑色矩形,那么我定义了以下函数。它返回SDL_Rect类型的匹配矩形。

SDL_Rect BlackRect(){
     for(int i = 0; i < Max_Rows ; i++){
        for(int j = 0; j < Max_Columns; j++){
            if(Colors[i][j] == black)
                return newRects[i][j];
        }
     }
}

现在,如果我使用比较两个rects,它会抛出一个错误,就像这样

SDL_Rect temp = BlackRect();
if(temp == newRects[0][1])

它不让我比较。我查看了SDL_Rect类引用,它们有一个运算符==来比较rects但它在这里不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:4)

我猜你读错了参考资料。 SDL是一个C库,它不包含任何类或运算符。尽管如此,在您的C ++程序中,您可以在包含SDL标头后在您的全局头文件中的某处编写全局比较运算符:

inline bool operator==(const SDL_Rect& a, const SDL_Rect& b)
{
    return a.x==b.x && a.y==b.y && a.w==b.w && a.h==b.h;
}

请注意,我没有经常使用SDL,而是将其用作纯C库。也许有人已经编写了一个C ++包装器,它包含了我提供的辅助操作符。

答案 1 :(得分:0)

如果您不想按照上一个答案中的规定对操作员进行操作,您也可以使用SDL中的此功能来比较2个字段:

SDL_bool SDL_RectEquals(const SDL_Rect * a,const SDL_Rect * b); https://wiki.libsdl.org/SDL_RectEquals?highlight=%28%5CbCategoryRect%5Cb%29%7C%28CategoryEnum%29%7C%28CategoryStruct%29

你会这样做:if(SDL_RectEquals(temp,newRects [0] [1]))...