Przekazywanie przez wartość do funkcji

0

Witam serdecznie!
Mam taki problem. Miałem dzisiaj zajęcia na studiach z programowania i miałem napisać program który bazował na kolejce. Na samym końcu programu musiałem napisać funkcję, która wyświetlała pierwszy element z kolejki a następnie go usuwała.

Problem polegał na tym, że funkcja była wywoływana w taki sposób:

std::cout << get(*f) << "\n"; 

Gdzie f był wskaźnikiem stworzonym w taki sposób:

Fifo* f = NULL;

Działająca deklaracja funkcji, która udało mi się napisać wygląda następująco:

 char *get(Fifo f){
//Takie tylko, aby dzialalo i program sie kompilowal ;/
	return fifo.tekst2;
}

Problem mam z tym, że do funkcji jest przekazywana wartość na która pokazuje wskaźnik, czyli do funkcji dostaje kopię obiektu a nie oryginał, czyli nie mogę usunąć elementu z oryginalnej kolejki.

Jest jakiś sposób albo trick, aby w funkcji móc dostać się do oryginalnego obiektu na który wskazuje f?

Wywołania funkcji nie mogłem zmieniać.

Z góry dziękuję za każdą odpowiedź.

0

W funkcji, jako argument przyjmij referencję albo wskaźnik.

0

jesli zrobisz cos takiego:

int* a = ...; // jakis wskaznik na int
foo(*a);
...
// foo wyglada tak:
void foo(int& asd) // przekazujemy przez referencje
{
  int* p = &asd; // w tym miejscu p==a
}
0

Taka funkcja powinna się nazywać pop a nie get ("pop" sugeruje właśnie, że coś zostanie usunięte, słowem "get" nazywa się funkcje które nic nie modyfikują a tylko pobierają wartości). No i może powinna być metodą a nie funkcją:

struct Fifo {
    char *Pop() { /* ... */ }
};

std::cout << f->Pop()

No a tak poza tym w c++ jest już odpowiednia klasa przygotowana: std:

std::queue fifo;

fifo.push(5);
fifo.push(2);

std::cout << fifo.pop() << std::endl;
std::cout << fifo.pop() << std::endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1