Wskaźnik na strukturę w strukturze

0

Dzień Dobry!
mam pytanie, przerabiam książkę i jest tam taki kod:

 
// queue.h -- interfejs kolejki
#ifndef QUEUE_H_
#define QUEUE_H_

// ta kolejka będzie przechowywała elementy klasy Customer
class Customer
{
    private:
        long arrive;     // czas dołączenia klienta do kolejki
        int processtime; // czas obsługi klienta
    public:
        Customer() { arrive = processtime = 0; }
        void set(long when);
        long when() const { return arrive; }
        int ptime() const { return processtime; }
};

typedef Customer Item;
class Queue
{
    private:
        // definicje zasięgu klasy
        // Node to definicja zagnieżdżona klasy, lokalna względem tej klasy
        struct Node { Item item; struct Node * next;};  //<< TO MIEJSCE
        enum {Q_SIZE = 10};
        // prywatne składowe klasy
        Node * front;       // wskaźnik czoła kolejki
        Node * rear;        // wskaźnik ogona kolejki
        int items;          // bieżąca liczba elementów kolejki
        const int qsize;    // maksymalna liczba elementów kolejki
        // definicje blokujące publiczny dostęp do operacji kopiowania
        Queue(const Queue & q) : qsize(0) { }
        Queue & operator=(const Queue & q) { return *this;}
    public:
        Queue(int qs = Q_SIZE);         // tworzy kolejkę o pojemności qs
        ~Queue();
        bool isempty() const;
        bool isfull() const;
        int queuecount() const;
        bool enqueue(const Item &item); // dodaje element na koniec kolejki
        bool dequeue(Item &item);       // wyciąga element z czoła kolejki
};
#endif

zaznaczyłem miejsce o które mi chodzi, jak to możliwe że wskaźnik typu Node jest zadeklarowany w strukturze tego typu? Wie ktoś może jak kompilator obsłuży takie zadanie, i jak ono może działać?
Z góry dziękuję za pomoc : D

7

Poczytaj o wskaźnikach. Wskaźnik to de facto tylko liczba oznaczająca adres w pamięci, pod którym znajduje się zmienna. Tak więc strukturkę możesz rozumieć jako

struct Node
{
	Item item;
	adres_nastepnego_node_numer next;
};
1

Kompilator nie ma problemów żeby to obsłużyć bo tak naprawdę nie ma tam co obsługiwać. Typ wskaźnika w takiej deklaracji nie ma większego znaczenia, będzie miał znaczenie dopiero jak będziesz chciał połączyć go z jakimś obszarem pamięci, wtedy kompilator sobie sprawdzi czy zachowałeś poprawność typów.

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