Kłopot ze zwracaniem przez funkcję NULL/nullptr

0

Witam.
Mam pewien problem. Otóż piszę sobie program ze strukturami itd. Napisałem już prawie cały jednak mam pewien problem-ogólnie funkcja ma zwracać wskaźnik no i w pewnym specyficznym przypadku (dokładnie gdy nie znajdzie wśród danych w tablicy żadnej wartości odpowiadającej podanym przez użytkownika kryteriom) to zamiast wskaźnika do elementu ma zwracać nullptr.
Przeczytałem sobie, że nullptr odpowiada wartości odnośnika nie zawierającego odniesienia do żadnego isntiejącego obiektu. Moje pytanie brzmi... w jaki z poniższych sposobów powinien wyglądać "return": (ptr to wskaźnik)
1.

ptr=nullptr;
return ptr;
return nullptr;

Jednak wsykakuje mi w obu przypadkach "nullptr was not delcared in this scope"... a wydawało mi się, że mój kompilator obsługuje standard C++11 :/ Może zamienić na NULL (wtedy nie mam errora ale program po odpaleniu się zawiesza???)

w f. main mam:

Couple*p=bestClient(cpls,4,BGZ);

Couple to pewien zdefiniowany typ zmiennych...a bestClient to właśnie ta funkcja, która napisałem.... Może powinienem w main dać jakiegoś "ifa" który wyświetli komunikat w zależności od wartości tego wskaźnika (wtedy program mi się nie zawiesza ale tego nie ma w poleceniu do zadania, jakie otrzymałem). ;/
Dzięki za wszystkie przydatne i miłe podpowiedzi!!!

2

Oczywiście, że można zwrócić sam nullptr. Nie ma przeciw temu żadnych przeszkód. Jeżeli w jakiejś Twojej tablicy nie została znaleziona struktura danych, którą szukasz to zwyczajnie zwracasz nullptr. To normalne.

Można wielorako to zrobić np:

// Pseudokod
// 1.
return (ptr) ? ptr : nullptr;

// 2.
if (ptr) return ptr;
return nullptr;

Warto przed rozpoczęciem wyszukiwania ustawić wskaźnik na nullptr, żeby nie było w nim śmieci. Wtedy te warunki zdziałają.

1

tzn wystarczy np zainicjować ten mój wskaźnik tym nullptr??? np.

ptr=nullptr;
1

Dokładnie. Wtedy wyszukiwanie zakończone niepowodzeniem pozostawi ten wskaźnik jako nullptr i będzie można ładnie zrobić if'y.

0

Dzięki... wszystko mi się niby zgadza z tym co czytałem i z tym co mówisz jednak... nadal wyskakuje mi ten "error" w przypadku nullptr... a w poleceniu mam nullptr i wolałbym jego użyć....Pracuję w Code Blocks... próbowałem coś szukać i przestawiać w opcjach żeby było zgodnie ze standardem C++11 ale nie wiem czy dobrze zaznaczyłem... ;/ Jak to ustawić? :(

1

Code Blocksa w ogóle nie znam, bo używam QtCreatora do C/C++ ale może to Ci pomoże: http://stackoverflow.com/questions/18174988/how-can-i-add-c11-support-to-codeblocks-compiler

0

Dobra, super!!! Dzięki wielkie!!! Patrzyłem co prawda w google i też to znalazłem ale oprócz tego musiałem wyłączyć jeszcze jedną opcje w "flags" w każdym razie-dzięki za wszystko!!! :D

1

A ja bym jednak sugerował nie zwracać nulla nigdy, bo to bardzo zła praktyka. Znacznie lepiej użyć jakiegoś Optional (nawet jeśli trzeba go sobie napisać).

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