首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从“SDL_Surface”转换为“SDL_Surface MainMenu::*”

无法从“SDL_Surface”转换为“SDL_Surface MainMenu::*”
EN

Stack Overflow用户
提问于 2013-08-11 20:47:46
回答 1查看 760关注 0票数 0

情景:,我试图在MainMenu类中有一个load_image方法,所以在主菜单中,我可以在主类中调用load_image方法。

问题:load_image方法中,我得到了错误:

错误C2440:“返回”:无法从“SDL_Surface”转换为“SDL_Surface MainMenu::*”

这发生在第47行,在红色的"optimizedImage“下划线。

以下是头文件:

代码语言:javascript
复制
#ifndef MAINMENU_H
#define MAINMENU_H
#include <iostream>
#include <string>
#include "SDL.h"
#include "SDL_image.h"

using namespace std;

class MainMenu
{
    private:
        string menuOption[3];
        string background;
        string img1;
        string img2;
        string img3;
        SDL_Surface *screen;
        SDL_Surface *bkgrnd;
        SDL_Surface *item;

public:

    MainMenu(SDL_Surface *screen, string bgImg, string optionImg1, string optionImg2, string optionImg3) 
        : background(bgImg), img1(optionImg1), img2(optionImg2), img3(optionImg3)
    {

    }

    ~MainMenu();
    SDL_Surface  *load_image(string filename);
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination);
    bool load_files();
    void Draw();
};
#endif

下面是.cpp文件:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include "MainMenu.h"
#include "glut.h"
#include "SDL.h"
#include "SDL_image.h"

MainMenu::~MainMenu()
{
}


SDL_Surface  MainMenu::*load_image(string filename)
{
//Temporary storage for the image tgat 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 nothing went wrong in loading the image
    if (loadedImage != NULL)
    {
        //Create an optimized image
        optimizedImage = SDL_DisplayFormat(loadedImage);

        //Free the old image
        SDL_FreeSurface(loadedImage);

        //if the image was optimized just fine
        if (optimizedImage != NULL)
        {
            //Map the color key
            Uint32 colorkey = SDL_MapRGB( optimizedImage->format,0,0xFF,0xFF);
            //Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent
            SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, colorkey);
        }
        return optimizedImage;
    }
    return optimizedImage;
}

void MainMenu::apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
    SDL_Rect offset;
    //Give the offsets to the rectangle
    offset.x = x;
    offset.y = y;

    SDL_BlitSurface(source, NULL, destination, &offset);
}

bool MainMenu::load_files()
{
    //Load images
    item = load_image(img1);
    bkgrnd = load_image(background);
    if (item == NULL || bkgrnd == NULL)
    {
        return false;
    }
    return true;
}

void MainMenu::Draw()
{
    apply_surface(0, 0, bkgrnd, screen);
    apply_surface(320, 0, bkgrnd, screen ); 
    apply_surface(0, 240, bkgrnd, screen ); 
    apply_surface(320, 240, bkgrnd, screen );

    apply_surface(180, 140, item, screen ); 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-11 20:51:20

在cpp文件中,更改以下内容:

代码语言:javascript
复制
SDL_Surface  MainMenu::*load_image(string filename)

对此:

代码语言:javascript
复制
SDL_Surface* MainMenu::load_image(string filename)

函数的返回类型是SDL_Surface*,而不是SDL_Surface

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18176520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档