Skocz do zawartości

Funkcje w C - problem


Rekomendowane odpowiedzi

Opublikowano

Robię platformówkę na PSP. Wszystko by szło gładko, gdyby nie problem.

 

Mam errory:

- redefinition of wallmake0

- previous definition of wallmake0 was here

- redefinition of wallmake1

- previous definition of wallmake1 was here

- redefinition of wallmake2

- previous definition of wallmake2 was here

 

Wszystkie dotyczą pliku wallmake.h, który wygląda tak:

void wallmake0(int wx1, int wx2, int wy1, int wy2) {
               // Make a wall with id 0.
              int wall_exists_0;
              int wall_x1_0;
              int wall_x2_0;
              int wall_y1_0;
              int wall_y2_0;
              wall_exists_0=1;
              wall_x1_0=wx1;
              wall_x2_0=wx2;
              wall_y1_0=wy1;
              wall_y2_0=wy2;
              }
void wallmake1(int wx1, int wx2, int wy1, int wy2) {
               // Make a wall with id 1.
              int wall_exists_1;
              int wall_x1_1;
              int wall_x2_1;
              int wall_y1_1;
              int wall_y2_1;
              wall_exists_1=1;
              wall_x1_1=wx1;
              wall_x2_1=wx2;
              wall_y1_1=wy1;
              wall_y2_1=wy2;
              }
void wallmake2(int wx1, int wx2, int wy1, int wy2) {
               // Make a wall with id 2.
              int wall_exists_2;
              int wall_x1_2;
              int wall_x2_2;
              int wall_y1_2;
              int wall_y2_2;
              wall_exists_2=1;
              wall_x1_2=wx1;
              wall_x2_2=wx2;
              wall_y1_2=wy1;
              wall_y2_2=wy2;
              }

 

Te funkcje są użyte w pliku stage1.h, który jest taki:

#include "wallinit.h"

// Stage 1-1 Play

int stage11() {
  // Set wall 1 - ceiling
  wallmake0(0,480,0,64);
  // Set wall 2 - wall
  wallmake1(0,64,64,192);
  // Set wall 3 - floor
  wallmake2(0,480,192,272);
  char buffer[200];
  Image* ourImage;
  sprintf(buffer, "/data/stages/stage11.png");
  ourImage = loadImage(buffer);
    while(1) {
             blitAlphaImageToScreen(0 ,0 ,480 , 272, ourImage, 0, 0);
             }
}

 

Za nic nie wiem, co zmienić. :( Czy ktoś może mi pomóc?

  • Filar Społeczności
Opublikowano

A wallinit.h?

 

Poza tym w tychże funkcjach definiujesz zmienne, które automatycznie są i tak niszczone. Głupie to trochę. :)

Opublikowano
A wallinit.h?

 

Pomyliłem się w pisaniu posta, wallmake.h to wallinit.h.

 

Poza tym w tychże funkcjach definiujesz zmienne, które automatycznie są i tak niszczone. Głupie to trochę. :)

 

Niezupełnie wiem, o co chodzi z tym zniszczeniem.

  • Filar Społeczności
Opublikowano

No chodzi o to, że zmienna zadeklarowana w jakimś zasięgu nie jest widoczna poza jej granicami ( znaki { i } ). Przykład:

 

while ( true )

{

int aaa;

aaa = 4;

break;

}

 

tutaj aaa już nie, bo zostało zniszczone po wyjściu programu poza zasięg pętli while.

Opublikowano

Zaczynam rozumieć. Czyli takie zmienne muszą być zadeklarowane przed mainem i innymi funkcjami?

  • Filar Społeczności
Opublikowano

Nie. Powinieneś poznać zasady pisania obiektowego, bo strukturalnie pisząc nic dobrego z tego nie wyjdzie.

Opublikowano

Czyli gdzieś przed mainem powinno być:

class murek
{
   public:
   unsigned int x1;
   unsigned int x2;
   unsigned int y1;
   unsigned int y2;
};

 

A potem przy robieniu leveli:

murek mur1;
mur1.x1=0;
mur1.x2=32;
mur1.y1=0;
mur1.y2=32;

 

Czy jakoś tak powinno to wyglądać? Przestudiowałem szybko artykuł napisany przez Vardiego (big thx!).

 

A tak propos: jak można tworzyć zależność od jakiegokolwiek objektu z danej klasy? Chodzi o np. sprawdzanie kolizji z jakimkolwiek objektem klasy mur za pomocą if-ów.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...