Przekazywanie przez wartość do funkcji

Odpowiedz Nowy wątek
2012-10-17 23:57
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ź.

Pozostało 580 znaków

2012-10-18 00:01
Rev

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


Pozostało 580 znaków

2012-10-18 00:02
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
}

░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2012-10-18 11:36
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::queue:

std::queue fifo;
 
fifo.push(5);
fifo.push(2);
 
std::cout << fifo.pop() << std::endl;
std::cout << fifo.pop() << std::endl;
edytowany 5x, ostatnio: adf88, 2012-10-18 11:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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