Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przypisanie zmiennej nullptr do oryginalnej zmiennej

Ostatnio zmodyfikowano 2024-07-23 15:28
Autor Wiadomość
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.


C/C++
void transferItem( Item * item, Inventory * from, Inventory * to ) {
   
from->removeItem( item );
   
   
if( from->items.size() == 0 )
       
 from = nullptr; // usuwanie starego inventory
   
   
to->addItem( item );
}

transferItem( item, currentInventory, player->bag );
P-181354
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:
C/C++
void transferItem( Item * item, Inventory * & from, Inventory * to ) {
   
//... reszta bez zmian
}
P-181355
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-22 15:18:32
Niestety nie działa :-/

C/C++
class Furniture
    : public GameObject
{
public:
   
Texture * texture;
   
sf::Sprite sprite;
   
   
Inventory * inventory;
   
Texture * takeItTexture;
   
sf::Sprite takeItSprite; // draw a hand to take it
   
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; // delete empty inventory
   
   
to->addItem( item );
}

// ...
// main

transferItem( currentInventory->items[ bagCursor ], currentInventory, player->bag );
P-181356
DejaVu
» 2024-07-22 16:59:02
A jak stwierdziłeś, że nie działa? wypisałeś 'currentInventory' albo debuggerem sprawdziłeś 'currentInventory'?
P-181357
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.

C/C++
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

C/C++
void transferItem( Item * item, Inventory * & from, Inventory * & to ) {
   
from->removeItem( item->name );
   
   
if( from->items.size() < 1 )
       
 from = nullptr; // delete empty inventory
   
   
to->addItem( item );
}
P-181358
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.
P-181359
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
P-181360
pekfos
» 2024-07-22 19:43:53
C/C++
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.
P-181361
« 1 » 2 3
  Strona 1 z 3 Następna strona