2015-04-20 3 views
-3

В моем коде я пытаюсь создать цикл, который работает, изменяя значение указателя и значение печати того же указателя. Этот код - мой метод для бесконечного списка.Указатель на указатель не работает

#include <iostream> 
using namespace std; 

class pacjent 
{ 
public: 
    char nazwisko[20]; 
    pacjent*nastepny; 
    pacjent(); 
    ~pacjent(); 
}; 

pacjent *POCZATEK = NULL, *KONIEC = NULL; 

pacjent::pacjent() { 
    cout << "Podaj nazwisko: "; 
    cin >> nazwisko; 
    if (POCZATEK == NULL) { 
     POCZATEK = this; 
     KONIEC = this; 
    } else { 
     KONIEC->nastepny = this; 
     nastepny = NULL; 
    } 
} 

pacjent::~pacjent() { 
    POCZATEK = POCZATEK->nastepny; 
} 

pacjent* NOW = POCZATEK; 
void drukuj() { 
    ///////////////////////////////// LOOP MENTIONED 
    // while(NOW->nastepny!=NULL) 
    // { 
    cout << NOW->nazwisko << endl; //do not work 
    //  NOW=NOW->nastepny; 
    // cout << POCZATEK->nazwisko << endl; // works fine 
    // } 
} ////////////////////////////////// 


int main() { 
    char SELECTOR; 
    while (SELECTOR != 'q') { 
     cin >> SELECTOR; 
     switch (SELECTOR) { 
     case 'n': 
      KONIEC = new pacjent; 
      break; 
     case 'p': 
      delete POCZATEK; 
      break; 
     case 'd': 
      drukuj(); 
      break; 
     default: 
      break; 
     } 
    } 
    return 0; 
} 

Функция drukuj() не будет печатать содержание «NOW» (я получаю пустой экран) указатель, но с POCZATEK работает отлично. Есть идеи?

+1

Вы никогда не обновляете 'NOW' ... – Angew

+0

' NOW' не является указателем на указатель. Я не вижу указателей на указатели где угодно. –

+0

Как не получается это сделать - извините - ваш код мусор - получите некоторые книги! –

ответ

1

Функция drukuj() не печатает содержимое указателя «СЕЙЧАС» (я получаю пустой экран), но с POCZATEK отлично работает. Есть идеи?

NOW инициализируется как:

pacjent* NOW = POCZATEK; 

В то время, значение POCZATEK является NULL. Следовательно, NOW также инициализируется до NULL. Позже в вашем коде POCZATEK изменен, чтобы указывать на вновь созданные объекты, но это не изменяется там, где указывает NOW. Он по-прежнему указывает на NULL.

Вы можете убедиться, что NOW и POCZATEK всегда указывают на тот же объект, сделав NOW ссылкой на указатель и инициализировать его с POCZATEK.

pacjent*& NOW = POCZATEK; 
+0

Есть ли какой-либо метод установить сейчас, как всегда, для POCZATEK? – superstate

+0

Да. См. Мое обновление. –

0
pacjent* NOW = POCZATEK; // this is null 

Создать новый объект pacjent и назначить его членов значения, которые вы хотите, а затем попытаться распечатать.

Смежные вопросы