emSon Temat założony przez niniejszego użytkownika |
[C++] Problem z przesłaniem tablicy obiektów do funkcji » 2015-10-11 17:10:18 Cześć. Mam funkcje strzal(), którą wywołuje tak: strzal( pole, zajetePola );
Wywołanie jest zawarte w int main(), to chyba oczywiste. Jej deklaracja znajduje się w pliku klasy.h: void strzal( Pole * x[], int & z );
Jest zaprzyjaźniona z klasą Pole: friend void strzal( Pole * x[], int & z );
Sama funkcja wygląda tak: void strzal( Pole * x[], int & z ) { ... }
Treść błędu: error: cannot convert 'Pole*' to 'Pole**' for argument '1' to 'void strzal(Pole**, int&)'|
Co jest źle ;) ? |
|
Gibas11 |
» 2015-10-11 17:25:03 Funkcja oczekuje wskaźnika na tablicę obiektów "Pole", zamiast: void strzal( Pole * x[], int & z );
użyj tego: void strzal( Pole x[ n ], int & z );
n - rozmiar tablicy, lub tego: void strzal( Pole * x, int & z );
|
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-10-11 17:43:10 Obydwa sposoby się kompilują, jednak funkcja nie zmienia atrybutów obiektu Pole. if( x[ s ].zajete == true ) { cout << "Trafiono statek ID: " << x[ s ].adres << endl; x[ s ].proba == true; x[ s ].trafiony == true; z--; }
To jest fragment funkcji, który przypisuje wartość true atrybutom proba i trafiony. Po dodaniu tego cout'a na koniec kodu wychodzi wartość "0", co oznacza, że funkcja pracuje na kopii tablicy, a nie na oryginale. Czemu tak się dzieje? |
|
Gibas11 |
» 2015-10-11 18:03:43 Źle musi być coś po drodze, musisz ustawiać to z powrotem na false gdzieś indziej, albo odwołujesz się do złego elementu, trudno powiedzieć bo nie mam całego kodu. Generalnie na pewno pracujesz na oryginale, bo przekazując tablicę, zawsze przekazujesz wskaźnik na nią a nie samą zawartość. |
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-10-11 18:25:10 Czytaj uważnie. Napisałem, że dodałem cout'a po tym ifie, co oznaczałoby, że kod wygląda tak: if( x[ s ].zajete == true ) { cout << "Trafiono statek ID: " << x[ s ].adres << endl; x[ s ].proba == true; x[ s ].trafiony == true; z--; cout << x[ s ].proba; }
Już w tym momencie cout wyświetla 0, czyli fałsz. Mało prawdopodobne by funkcja pracowała na oryginale, skoro dwie linijki później prawda staje się fałszem. |
|
Lora |
» 2015-10-11 18:31:32 Może dlatego, że nie używasz operatora przypisania? |
|
Gibas11 |
» 2015-10-11 18:36:07 No rzeczywiście, powinienem był czytać uważnie, że też nie zauważyłem twojej pomyłki w operatorach. :P |
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-10-11 18:56:57 O losie, faktycznie! Prościutki błąd. Teraz działa, dzięki! |
|
« 1 » |