• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wzkaznik, referencja

+1 głos
667 wizyt
pytanie zadane 26 grudnia 2016 w C i C++ przez qwerty Początkujący (380 p.)

Witam!

Czy mógłby mi ktoś pomóc, ten kod mi nie działa, nie mogę znaleźć błędu.

Z góry dziękuję za pomoc!

#include <iostream>
using namespace std;
void spr (string *wznaimie, string &imie)
{
    if(wznaimie == NULL)
    {
        cin>>imie;
        wznaimie = &imie;
    }
}
int main ()
{
    string imie;
    string *wznaimie = NULL;
    spr(wznaimie,imie);
    cout<<imie;
    cout<<*wznaimie;
    return 0;
}

 

5 odpowiedzi

+1 głos
odpowiedź 26 grudnia 2016 przez L33TT12 Gaduła (3,950 p.)
wybrane 26 grudnia 2016 przez qwerty
 
Najlepsza

Musisz pobrać referencję od wskaźnika, dodaj to do funkcji 
void spr (string *&wznaimie, string &imie)
i wszystko zadziała.

komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Dzieki wielkie działa!
0 głosów
odpowiedź 26 grudnia 2016 przez Knayder Nałogowiec (37,640 p.)

Musisz załączyć bibliotekę string.
 

#include <string>

 

komentarz 26 grudnia 2016 przez Knayder Nałogowiec (37,640 p.)
Ponieważ w niej znajduje się przeładowanie operatorów >> oraz << dla obiektów klas input, output stream i stringów.
komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Wciąż nie działa ;C
komentarz 26 grudnia 2016 przez Knayder Nałogowiec (37,640 p.)
Chodzi ci o to, że kod ci się nie kompiluje, czy że nie działa poprawnie?
komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Wpisuję imie, później wyswietla się imie, ale na końcu pojawia się komunikat, że program przestał działać (nie wyswietla *wznaimie).
0 głosów
odpowiedź 26 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
Dereferencja NULL-pointera to UB. W 99,9% przypadków powoduje crasha'a.
komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Co to ub?
komentarz 26 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
undefined behavior
komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Czyli, ze nie da się nic zrobić?
komentarz 26 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
Można. Nie rób dereferencji na NULL-pointer'rze
0 głosów
odpowiedź 26 grudnia 2016 przez fenq80 Bywalec (2,940 p.)
W linijce 9 napisz *wznaimie = imie; ponieważ gdy wewnątrz tej funkcji przypiszesz nowy adres do tego wskaźnika wtedy ten wskaźnik nie będzie już wskazywał na miejsce w pamięci na które wskazuje zmienna wznaimie zadeklarowana w funkcji main.  Wten sposób funkcja nie zmieni wartości wskazywanej przez wskaźnik wznaimie (tej w mainie)  wiec w linijce 17 próbujesz wyświetlić pusty wskaźnik (to nie może się skończyć dobrze)
komentarz 26 grudnia 2016 przez qwerty Początkujący (380 p.)
Niestety również nie działa.
komentarz 26 grudnia 2016 przez fenq80 Bywalec (2,940 p.)
W funkcji zamiast 8 lini napisać wznaimie =new string (name) ;
0 głosów
odpowiedź 26 grudnia 2016 przez JAKUBW Nałogowiec (33,470 p.)

Przekazujesz wskaźnik który jest kopiowany. Przekaż orginał wskaźnika(wskaźnik do wskaźnika)

#include <iostream>
#include <string>

using namespace std;

void spr (string **wznaimie, string &imie)
{
    if(*wznaimie == NULL)
    {
        cin>>imie;
        *wznaimie = &imie;
    }
}
int main ()
{
    string imie;
    string *wznaimie = NULL;
    spr(&wznaimie,imie);
    cout<<imie<<endl;
    cout<<*wznaimie;
    return 0;
}

 

Podobne pytania

+2 głosów
3 odpowiedzi 1,895 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Bondrusiek Maniak (61,460 p.)
0 głosów
4 odpowiedzi 1,742 wizyt
pytanie zadane 21 lutego 2017 w C i C++ przez Danthee Początkujący (260 p.)
0 głosów
2 odpowiedzi 2,090 wizyt
pytanie zadane 3 sierpnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

93,604 zapytań

142,529 odpowiedzi

322,996 komentarzy

63,092 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...