Jecade
Jecade

Reputation: 13

How to access a protected/private nested class pointer from a member

I have a queue.h file like the following.

Is it possible that I can access the head pointer of the queue from Main?

If yes, what should I do in main?

Since the head pointer is a class pointer, and its type is a protected nested class, I don't think I can access it from main.

Therefore, I try to create a function getHead() as public member. However, another problem comes, it is I am using template class. Please guide me how to solve this problem.

my header file:

#include <iostream>
#include <iomanip>
using namespace std;

class PCB
{
    public:
        int PID;
        string fileName;
};    

template<class T>
class myQueue
{
    protected:
        class Node
        {
            public:
                T info;
                Node *next;
                Node *prev;
        };

        Node *head;
        Node *tail;
        int count;

    public:
        void getHead(Node **tempHead);
};

template<class T>
void myQueue<T>::getHead(Node **tempHead)
{
    *tempHead = head;
}    
#endif 

my main is:

#include "myQueue.h"
#include <iostream>

int main()
{
    myQueue<PCB> queue;
    //How can I access the Head pointer of my Queue here?
    //queue.getHead(&tempHead);
    return 0;
}

Upvotes: 1

Views: 346

Answers (1)

πάντα ῥεῖ
πάντα ῥεῖ

Reputation: 1

To acess myQueue::Node from outside the class you need to rewrite your getter function a bit:

template<class T>
myQueue<T>::Node* myQueue<T>::getHead()
{
    return head;
}

Then you can use it in main() like this

auto head = queue.getHead();

Note that the usage of auto is important in this case. You still cannot declare any variable of type myQueue<T>::Node or myQueue<T>::Node** outside of myQueue<T>, but you can use auto variables to hold these types.

Upvotes: 2

Related Questions