tBane Temat założony przez niniejszego użytkownika |
Przypisanie zmiennej nullptr do oryginalnej zmiennej » 2024-07-22 14:48:13 Witam. Potrzebuję przypisać pewnej zmiennej nullptr. void transferItem( Item * item, Inventory * from, Inventory * to ) { from->removeItem( item ); if( from->items.size() == 0 ) from = nullptr; to->addItem( item ); }
transferItem( item, currentInventory, player->bag );
|
|
DejaVu |
» 2024-07-22 15:00:34 Pewnie zrobisz sobie memory leaka w ten sposób, ale poniekąd osiągnąłeś cel. Jeżeli chcesz, aby wskaźnik był zmodyfikowany poza wywołaniem tej funkcji to: void transferItem( Item * item, Inventory * & from, Inventory * to ) { }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-22 15:18:32 Niestety nie działa :-/ class Furniture : public GameObject { public: Texture * texture; sf::Sprite sprite; Inventory * inventory; Texture * takeItTexture; sf::Sprite takeItSprite; bool showHand; };
Inventory * currentInventory;
void setInventoryPanel( Inventory * & i ) { currentInventory = i; }
void transferItem( Item * item, Inventory * & from, Inventory * & to ) { from->removeItem( item->name ); if( from->items.size() < 1 ) from = nullptr; to->addItem( item ); }
transferItem( currentInventory->items[ bagCursor ], currentInventory, player->bag );
|
|
DejaVu |
» 2024-07-22 16:59:02 A jak stwierdziłeś, że nie działa? wypisałeś 'currentInventory' albo debuggerem sprawdziłeś 'currentInventory'? |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-22 17:07:43 Zrobiłem tak, że gdy gracz stoi obok mebla, w którym są jakieś przedmioty to pokazuje się sprite dłoni. Skoro zabarłem z niego przedmioty i jego (tego mebla) inventory jest nullptr to nie powinno rysować sprite'a dłoni. if( inventory != nullptr && intersectionRectangleWithElipse( x2, y2, rx2, ry2, x1, y1, rx1, ry1 ) ) { showHand = true; } else { showHand = false; }
Stąd wnioskuję, że poniższy kod - usuwanie - nie działa void transferItem( Item * item, Inventory * & from, Inventory * & to ) { from->removeItem( item->name ); if( from->items.size() < 1 ) from = nullptr; to->addItem( item ); }
|
|
DejaVu |
» 2024-07-22 19:35:55 Ale nie dyskutowaliśmy o 'niedziałającym kodzie', tylko o przekazaniu 'nulla' do wskaźnika poziom 'wyżej'. Referencja właśnie do tego służy, aby móc zmodyfikować wartość 'przekazywanej' zmiennej do funkcji. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-22 19:36:45 No i właśnie to próbuję osiągnąć, przypisać oryginalnej zmiennej wartość nullptr |
|
pekfos |
» 2024-07-22 19:43:53 transferItem( currentInventory->items[ bagCursor ], currentInventory, player->bag );
Podaj kontekst. Po tym wywołaniu currentInventory powinno być puste jeżeli te "kasowanie" wystąpiło, co jeszcze nie znaczy że to będzie "działać" w szerszym sensie. |
|
« 1 » 2 3 |