Jump to content
  • Advertisement
Sign in to follow this  
Atash

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

This topic is 4745 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
Advertisement
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.

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 Atash
Still got the same error.

I feel cofused >_<


SDL_Surface image;

needs to be:

SDL_Surface *image;

In your Paddle class.

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!