• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze wskaznikami w funkcjach/klasach

42 Warsaw Coding Academy
0 głosów
218 wizyt
pytanie zadane 12 stycznia 2016 w C i C++ przez Gryfin123 Początkujący (260 p.)

Hejo! Do programowania używam CodeBlocks i SDL. Pokazuje mi błąd w linijce 53 w funkcje.cpp i nie mam pojęcia jak się go pozbyc. Każda pomoc mile widziana. To nie jest ważny probram ale im wcześniej to zrozumiem tym lepiej :d.

Tresc błędu :  C:\Users\(....)\funkcje.cpp|53|error: cannot convert 'SDL_Surface' to 'SDL_Surface*' for argument '1' to 'int SDL_UpperBlit(SDL_Surface*, const SDL_Rect*, SDL_Surface*, SDL_Rect*)'|

Tu jest kod:

MainClass.cpp :

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <windows.h>
#include <iostream>

#include "funkcje.h"

using namespace std;

//Wartosci określone
int window_width = 500,window_height = 500;
int scena = 0;

//nieokreślone
SDL_Window *window = nullptr;
SDL_Surface *screen = nullptr;
SDL_Surface *tlo = nullptr;
SDL_Event event;
SDL_Rect rect1;
Fps_klasa fps;
SDL_Surface *prob = IMG_Load("img/gracz.bmp");
Gracz proba = SetPlayer(200,200,100,100,100,prob);

int main(int argc, char*args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);

    window = SDL_CreateWindow("ShootingUp",500,500,window_width,window_height,0);
    screen = SDL_GetWindowSurface(window);

    while(true){
        if (scena == 0){//Scena 1 Inicjacja
            tlo = IMG_Load("img/tlo.bmp");

			while(scena == 0){//Scena 1 Step Event
                fps.start();

                while(SDL_PollEvent(&event)){
                    if (event.type == SDL_QUIT){
                        return 0;
                    }
                }



                //Render
                rect1.x = 0;
                rect1.y = 0;
                SDL_BlitSurface(tlo,NULL,screen,&rect1);
                //render proba
                proba.GraczStepEvent(screen);

                SDL_UpdateWindowSurface(window);
                fps.koniec(60);
			}
        }
        if (scena == 1){
			while(scena == 1){//Scena 2

			}
        }
    }
    return 0;
}

funkcje.h :

#include <time.h>
#include <SDL2/SDL.h>

class Fps_klasa{

private:
    int fps_poczatek, fps_koniec, roznica, fps;
    float delay;

public:
    void start(); // sprawdz aktualny czas
    void koniec(int fps); //sprawdz roznice miedzy klatkami (kontorola fps)
};

class Gracz{

private:
	int b_max_health, b_attack_spd, b_move_spd; //bazowe statystyki
	int PosX, PosY, health, max_health, attack_spd, move_spd; // aktualne statystyki
	bool inv, on;// niewrażliwosc,włączony
	SDL_Rect rect1;// kwadrat do rysowania spritu
	SDL_Surface sprite; //sprite

public:
	Gracz(int,int,int,int,int,SDL_Surface*); // "Jakby konstruktor"
	int GetHealth(); //zwraca zdrowie
	bool Collision(); // zderzenie z pociskami i przeciwnikami
	void Shoot(); // strzela
	void CheckKeyBoard(); //sprawdza poroszanie, strzelanie itd.
	void Destroy(); //Zniszcz
	void ChangeHealth(int); //zmien zdrowie
	void SetSprite(SDL_Surface*); //ustawianie sprita
	void GraczStepEvent(SDL_Surface); // GameMaker Step Event
};
	Gracz SetPlayer(int,int,int,int,int,SDL_Surface*); //pojaw gracza(w miejsce funkcji pojawaia się klasa gracz)

funkcje.cpp : 

#include <time.h>
#include <SDL2/SDL.h>
#include "funkcje.h"

    void Fps_klasa::start(){
        fps_poczatek = clock();
    }

    void Fps_klasa::koniec(int fps){
        fps_koniec = clock();
        roznica = fps_koniec-fps_poczatek;
        delay = (1000.0/fps)-roznica;

        if(delay > 0){
            SDL_Delay(delay);
        }
    }

//Gracz

	int Gracz::GetHealth(){//zwraca zdrowie
		return health;
	}
	bool Gracz::Collision(){// zderzenie z pociskami i przeciwnikami;
		return true;
	}
	Gracz::Gracz(int _PosX,int _PosY,int _b_max_health,int _b_attack_spd,int _b_move_spd,SDL_Surface *spr){// "Jakby konstruktor"
		PosX = _PosX;
		PosY = _PosY;
		b_max_health = _b_max_health;
		b_attack_spd = _b_attack_spd;
		b_move_spd = _b_move_spd;
		sprite = *spr;
	}
	void Gracz::Shoot(){// strzela
		;
	}
	void Gracz::CheckKeyBoard(){//sprawdza poroszanie, strzelanie itd.
		;
	}
	void Gracz::Destroy(){//Zniszcz
		;
	}
	void Gracz::ChangeHealth(int h){//zmien zdrowie
		;
	}
	void Gracz::SetSprite(SDL_Surface *spr){//ustawianie sprita
		sprite = *spr;
	}
	void Gracz::GraczStepEvent(SDL_Surface *scr){
        rect1.x = PosX;
        rect1.y = PosY;
        SDL_BlitSurface(sprite,NULL,*scr,&rect1);
	}
	Gracz SetPlayer(int _PosX,int _PosY,int _b_max_health,int _b_attack_spd,int _b_move_spd,SDL_Surface *spr){//pojaw gracza(w miejsce funkcji pojawaia się klasa gracz)
		Gracz bob(_PosX,_PosY,_b_max_health,_b_attack_spd,_b_move_spd,spr);
		return bob;
	}

Nie wiem o co robie źle :<

 

 

 

 

1 odpowiedź

0 głosów
odpowiedź 4 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Na SDLce się nie znam, ale widać wyraźnie, że kompilator próbuje ci powiedzieć, że funkcja SDL_UpperBlit(...), jako pierwszy argument wymaga jakiegoś wskaźnika, a nie całego obiektu, w tym przypadku.. nie może skonwertować SDL_Surface na SDL_Surface*, zgaduję, że dodanie &, rozwiąże problem, ale mogę się mylić.

Tresc błędu :  C:\Users\(....)\funkcje.cpp|53|error: cannot convert 'SDL_Surface' to 'SDL_Surface*' for argument '1' to 'int SDL_UpperBlit(SDL_Surface*, const SDL_Rect*, SDL_Surface*, SDL_Rect*)'|

Podobne pytania

0 głosów
4 odpowiedzi 489 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez Ninja198 Początkujący (330 p.)
0 głosów
0 odpowiedzi 746 wizyt
pytanie zadane 8 kwietnia 2022 w C i C++ przez kubekszklany Gaduła (3,250 p.)
0 głosów
0 odpowiedzi 170 wizyt

93,382 zapytań

142,382 odpowiedzi

322,540 komentarzy

62,738 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...