调用'SDL_UpperBlit'没有匹配函数
No matching function for call to 'SDL_UpperBlit'
我对c++还比较陌生,所以尽管我有其他c语言的经验,但这可能只是一个简单的错误。这是我的代码:
#include <iostream>
#include <SDL2/SDL.h>
SDL_Window *window;
SDL_Surface *windowSurface;
SDL_Surface *image[3];
SDL_Surface *currentImage;
int close();
SDL_Rect gRect(int, int, int, int); //for method described below
int main(int argc, char *argv[]){
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500, 500, SDL_WINDOW_SHOWN);
windowSurface = SDL_GetWindowSurface(window);
image[0] = SDL_LoadBMP("filepath/img.bmp");
image[1] = SDL_LoadBMP("filepath/img2.bmp");
image[2] = SDL_LoadBMP("filepath/img3.bmp");
currentImage = image[0];
bool done = false;
while(!done){
SDL_Rect rec;
rec.x = 100;
rec.y = 100;
rec.h = 100;
rec.w = 100;
SDL_BlitSurface(currentImage, NULL, windowSurface, rec);
SDL_UpdateWindowSurface(window);
}
return close();
}
int close(){
for(int i = 0; i < 3; i++){
SDL_FreeSurface(image[i]);
image[i] = nullptr;
}
currentImage = nullptr;
window = nullptr;
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
运行此程序时,我收到错误"调用"SDL_UpperBlit"时没有匹配函数"。显然,这已经被SDL_BlitSurface所取代,我正在我的程序中使用它。
如果我将函数调用中的"rec"替换为"NULL",并且我的程序像正常一样编译,屏幕上充满了图像,则不会出现此错误。
我尝试使用一个函数来创建SDL_Rect,如下所示:
SDL_Rect gRect(int x, int y, int w, int h){
SDL_Rect ret;
ret.h = h;
ret.w = w;
ret.x = x;
ret.y = y;
return ret;
}
并将SDL_BlitSurface调用更改为
SDL_BlitSurface(currentImage, NULL, windowSurface, gRect(100, 100, 100, 100));
这并不能解决问题,并且会出现相同的错误。如果我能在这方面得到任何帮助,我将不胜感激!谢谢
(可选)附言:我也希望在for循环中放入"image[0]"、"image[1]"answers"image[2]"声明。我试过了,但在类型和连接方面有一些问题,所以如果有人知道我该怎么做,请告诉我。
int SDL_BlitSurface(SDL_Surface* src,
const SDL_Rect* srcrect,
SDL_Surface* dst,
SDL_Rect* dstrect)
您的代码片段
SDL_Rect rec;
rec.x = 100;
rec.y = 100;
rec.h = 100;
rec.w = 100;
SDL_BlitSurface(currentImage, NULL, windowSurface, rec);
传递rec
作为最后一个参数,其类型为SDL_Rect
,但应为SDL_Rect*
。应为例如SDL_BlitSurface(currentImage, NULL, windowSurface, &rec);
我还建议不要使用close
作为函数名,因为众所周知它会导致问题(对于C++来说,这并不像它有名称篡改那样正确,但仍然如此)。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- std::函数,带有 SDL 事件回调的 lambda 错误
- 如何正确使用 SDL_DestroyTexture() 等 SDL 函数?
- 从SDL库的函数返回的指针
- SDL在析构函数上释放曲面失败
- SDL C++字体呈现函数中未处理的异常
- 创建指向成员函数的非常量指针,以便进行 SDL 事件筛选
- SDL fscanf 函数问题
- 我正在使用 SDL 函数,但没有定义SDL_main。这样好吗?
- SDL函数的未定义引用
- 为什么我们必须在主函数中传递参数,而在Mingw中设置sdl
- SDL-有时无法及时调用音频回调函数
- 执行函数与时间间隔SDL/c++
- SDL 2 对"WinMain@16"和多个 SDL 函数的未定义引用
- 指向SDL音频回调成员函数的指针
- 我找不到这个函数(SDL/OpenGL)的内存泄漏
- SDL c++: if函数不工作.编译精细-逻辑错误
- 使用复制构造函数后不渲染SDL纹理
- SDL析构函数调用太早