Sign in to follow this  

image = SDL_DisplayFormat( SDL_LoadBMP( "player2.bmp" ) )

This topic is 4376 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Okay, here's a bit of a problem: image = SDL_DisplayFormat(SDL_LoadBMP("player2.bmp")); image is an SDL_Surface pointer, and player2.bmp is, well, the obvious, but that doesn't really matter. I'm using Dev-C++ under the MingW compiler, creating an SDL based pong for starters. From the above code, I'm recieving the error message: 39 C:\Documents and Settings\Masood.SOLTANMM.000\Desktop\main.c no match for 'operator=' in '((Paddle*)this)->Paddle::image = SDL_DisplayFormat(SDL_LoadBMP_RW(SDL_RWFromFile(((const char*)"player1.bmp"), ((const char*)"rb")), 1))' and a note: note C:\Program Files\Dev-Cpp\include\SDL\SDL_video.h:95 candidates are: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) Anyone out there willing to help me out a bit, possibly explain to me why it isn't working? Or do I first need to put down my entire source code? Thanks in advance!

Share this post


Link to post
Share on other sites
Quote:
Original post by LessBread
It might help to split out the two function calls


That and the current way you are doing it will leak memory since you do not free the surface returned from SDL_LoadBMP(). In addition, SDL_LoadBMP is a macro, so placing it inside a function call might cause it to fail. Doing it LessBread's way should work, as long as image is indeed a SDL_Surface*.

Share this post


Link to post
Share on other sites
okay, posting in real-time right now...

I've just tried what you said, and I got an error only on the SDL_DisplayFormat() part.

Annnnnnnnnddddddddd...

Looked in the API, saw nothing wrong with the format... Buuutttt...

If I had not created a surface that has been set to be the video buffer (screen = SDL_SetVideoMode()) before that statement... I think I found the problem:


/*This is going to be pong. Tetris comes later*/
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

const int MAX_PLAYERS = 4;
SDL_Surface *screen = NULL;

class ball
{
int posX;
int posY;
public:
}

class Paddle
{
int posX;
int posY;
int keycheck[];
SDL_Surface image;
public:
Paddle(int playNumber);
int getX() {return posX;}
int getY() {return posY;}
void setX(int x) {posX = x;}
void setY(int y) {posY = y;}
void drawANDcheck();

};

Paddle::Paddle(int playNumber)
{
switch(playNumber)
{
case 1:
posX = 10;
posY = 250;
//image = SDL_DisplayFormat(SDL_LoadBMP("player1.bmp"));
SDL_Surface *bmp = SDL_LoadBMP("player1.bmp");
image = SDL_DisplayFormat(bmp);
break;
case 2:
posX = 580;
posY = 250;
image = SDL_DisplayFormat(SDL_LoadBMP("player2.bmp"));
break;
case 3:
posX = 250;
posY = 580;
image = SDL_DisplayFormat(SDL_LoadBMP("player3.bmp"));
break;
case 4:
posX = 250;
posY = 10;
image = SDL_DisplayFormat(SDL_LoadBMP("player4.bmp"))
break;
}
}
/*
void Paddle::drawANDcheck()
{
SDL_Rect *dst;
SDL_BlitImage();
}
*/


int main(int argc, char *argv[])
{
bool running = true;
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1)
{
return 0;
}
atexit (SDL_Quit);

screen = SDL_SetVideoMode(600, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);




...blahblahblah

Okay, just fixed that by putting the entire SetVideoMode thing at the top of my source...

Still got the same error.

I feel cofused >_<

Share this post


Link to post
Share on other sites
Quote:
Original post by LessBread
It might help to split out the two function calls

bmp = SDL_LoadBMP("player2.bmp")
image = SDL_DisplayFormat(bmp);

so that you can pinpoint which call fails - or rather which part of the statement won't compile.


In addition you might want to add error checking

bmp = SDL_LoadBMP("player2.bmp");

if (NULL == bmp)
// output an error message here and exit the function

image = SDL_DisplayFormat(bmp);
if (NULL == image)
// output an error message

// also don't forget to free the memory associated with bmp

Share this post


Link to post
Share on other sites

This topic is 4376 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this