'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;
}
在 运行 这个程序上我收到错误 "No matching function for call to "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));
这不能解决问题,并且会出现相同的错误。如果我能得到任何帮助,将不胜感激!谢谢!
(可选)PS:对于将 "image[0]"、"image[1]" 和 "image[2]" 声明放入 for 循环中的帮助,我也将不胜感激。我试过了,但在类型和连接方面遇到了一些问题,所以如果有人知道我该怎么做,请告诉我。
SDL_BlitSurface函数声明为
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
作为函数名称,因为它是 known 问题(对于 C++ 来说不是那么正确,因为它有名称修改,但仍然如此)。
我对 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;
}
在 运行 这个程序上我收到错误 "No matching function for call to "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));
这不能解决问题,并且会出现相同的错误。如果我能得到任何帮助,将不胜感激!谢谢!
(可选)PS:对于将 "image[0]"、"image[1]" 和 "image[2]" 声明放入 for 循环中的帮助,我也将不胜感激。我试过了,但在类型和连接方面遇到了一些问题,所以如果有人知道我该怎么做,请告诉我。
SDL_BlitSurface函数声明为
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
作为函数名称,因为它是 known