为啥 SDL_image 不起作用

Posted

技术标签:

【中文标题】为啥 SDL_image 不起作用【英文标题】:Why Is SDL_image not working为什么 SDL_image 不起作用 【发布时间】:2010-10-16 15:23:15 【问题描述】:

我是 C++ 和 SDL 的新手;我正在尝试使用此处的说明添加新的 SDL 扩展库:http://www.lazyfoo.net/SDL_tutorials/lesson03/windows/devcpp/index.php

但我收到以下错误:

3 C:\Documents and Settings\Edmund\My Documents\C++\myprojects\SDL\SDLevent.cpp SDL/SDL_image.h:没有这样的文件或目录。

C:\Documents and Settings\Edmund\My Documents\C++\myprojects\SDL\SDLevent.cpp 在函数 `SDL_Surface* load_image(std::string)' 中:

28 C:\Documents and Settings\Edmund\My Documents\C++\myprojects\SDL\SDLevent.cpp `IMG_Load' 未声明(首先使用此函数)

然后是一堆不合格的 id。

这是我的代码:

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"

#include <string>

//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

//The surfaces
SDL_Surface *image = NULL;
SDL_Surface *screen = NULL;

//The event structure that will be used
SDL_Event event;

SDL_Surface *load_image( std::string filename ) 

    //The image that's loaded
    SDL_Surface* loadedImage = NULL;

    //The optimized image that will be used
    SDL_Surface* optimizedImage = NULL;

    //Load the image
    loadedImage = IMG_Load( filename.c_str() );

    //If the image loaded
    if( loadedImage != NULL )
    
        //Create an optimized image
        optimizedImage = SDL_DisplayFormat( loadedImage );

        //Free the old image
        SDL_FreeSurface( loadedImage );
    

    //Return the optimized image
    return optimizedImage;


void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )

    //Temporary rectangle to hold the offsets
    SDL_Rect offset;

    //Get the offsets
    offset.x = x;
    offset.y = y;

    //Blit the surface
    SDL_BlitSurface( source, NULL, destination, &offset );


bool init()

    //Initialize all SDL subsystems
    if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
    
        return false;    
    

    //Set up the screen
    screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

    //If there was an error in setting up the screen
    if( screen == NULL )
    
        return false;    
    

    //Set the window caption
    SDL_WM_SetCaption( "Event test", NULL );

    //If everything initialized fine
    return true;


bool load_files()

    //Load the image
    image = load_image( "astyle.bmp" );

    //If there was an error in loading the image
    if( image == NULL )
    
        return false;    
    

    //If everything loaded fine
    return true;    


void clean_up()

    //Free the image
    SDL_FreeSurface( image );

    //Quit SDL
    SDL_Quit();    


   //Initialize
    if( init() == false )
    
        return 1;    
    

    //Load the files
    if( load_files() == false )
    
        return 1;    
    

//Apply the surface to the screen
    apply_surface( 0, 0, image, screen );

    //Update the screen
    if( SDL_Flip( screen ) == -1 )
    
        return 1;    
    

 //While the user hasn't quit
    while( quit == false )
    

 //While there's an event to handle
        while( SDL_PollEvent( &event ) )
        

    //If the user has Xed out the window
            if( event.type == SDL_QUIT )
            
                //Quit the program
                quit = true;
                
        
    

 //Free the surface and quit SDL
    clean_up();

    return 0;    

它与教程中的内容几乎相同,因此代码应该没有问题。我已经严格按照 Lazy foo 上的说明进行操作,我已将所有文件放在正确的位置并链接到它们,所以我不知道我做错了什么。

【问题讨论】:

看起来您没有正确设置 IDE 以包含 SDL_image.h 。尝试重试:) 【参考方案1】:

您的编译器找不到 SDL/SDL_image.h 标头,这会导致所有那些“未声明”的错误。

也许您在链接说明中跳过了Step 2。

【讨论】:

+1 用于链接到我最喜欢的游戏编程入门教程。 啊哈!!!我一直在尝试这样做 DAYS。请原谅我,但它让我发疯,我认为这是链接器、包含或库链接中的问题。 第一条错误信息清楚地表明“SDL/SDL_image.h:没有这样的文件或目录。”。您使用的是什么 IDE? 但是我尝试了代码块并且返回了相同的错误我只能假设链接器或您必须浏览以包含的其他一些文件中存在问题,要么或有。配置错误(lib 到旧/新) 我包括:#include "SDL\SDL_image.h"【参考方案2】:

你确定你有 SDL_Image 函数吗?你用的是什么IDE? 如果它的视觉工作室确保您已链接以下内容:

同时确保您已从http://www.libsdl.org/projects/SDL_image/ 下载了最新的 SDL_Image 文件

另一个可能的问题是您没有将 SDL_Image DLL 文件放在正确的位置。

【讨论】:

【参考方案3】:

你应该使用

#include "SDL.h"
#include "SDL_image.h"

并确保您已将 sdl 包含文件夹放入您的包含目录中

【讨论】:

以上是关于为啥 SDL_image 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Angular 的 $http.post 不起作用,它的 $http... 也不起作用,但 jQuerys ajax 起作用。为啥?

为啥 preventDefault 不起作用?

为啥 innerHtml 不起作用

为啥(ngModel)不起作用?

css 为啥有时MARGIN 不起作用,

为啥我的poi autoSizeColumn()不起作用