无法正确访问我在另一个 class 的私有区域中声明的 class

Unable to correctly access my class declared inside the private area of another class

我目前正在为我的队列开发一个深度复制构造函数 class,我对正确访问封装在私有区域中的数据的技术有点困惑。

queue.h 文件

class Queue
{
  public:
   Queue( const Queue& q );
   // other functions I have not yet finished yet, but will soon!

 private:
 class node  // node type for the linked list 
{
   public:
       node(int new_data, node * next_node ){
          data = new_data ;
          next = next_node ;
       }
       int data ;
       node * next ;
};

node * front_p ; 

node * back_p ;

int current_size ; 
};

这是我的以下 queue.cpp 文件(实现),其中包含函数

#include "queue.h"
#include <cstdlib>

Queue::Queue(const Queue& q ) // not sure
{

    if (front_p == NULL && back_p == NULL){
        front_p = back_p -> node(q.data, NULL); // problem here ;(
    }
        while (q != NULL)
        {
            node *ptr = new node;
            ptr->node(q.data, NULL)
            //ptr->data = q.data;
            back_p->next = ptr;
            back_p = ptr;
            q=q.next;
        }
        current_size = q.current_size;
}

*请注意,我的 main.cpp 不包括在内,因此没有 int main 以防有人认为 queue.cpp 是主文件。它是 queue.h

的实现

所以为了解释我的代码应该做什么,我将 Queue class 的一个实例传递给复制构造函数到复制构造函数中,我想访问 q 中的数据。我试过使用 q.data,但效果不是很好,我意识到我正在尝试访问 的 "data" 在另一个 class.[=30 中=]

当然我想也许我应该尝试做这样的事情q.node.data但这只是一厢情愿。

我的以下错误是从终端复制到这里的:

queue.cpp:14:23: error: invalid use of ‘Queue::node::node’
   front_p = back_p -> node(q.data, NULL);
                   ^
queue.cpp:14:30: error: ‘const class Queue’ has no member named ‘data’
   front_p = back_p -> node(q.data, NULL);

您遇到问题的整个代码块毫无意义。

if (front_p == NULL && back_p == NULL){
    // stuff
}

这是一个构造函数。 front_pback_p 没有预先存在的值。所以 if 是没用的。此时 this 对象 始终 为空。

front_p = back_p -> node(q.data, NULL); // problem here ;(

从代码的角度来看,该行毫无意义。 back_p 未设置,因此在其上使用 -> 运算符是非常错误的。目前尚不清楚您甚至想在这里做什么。你是说

front_p = back_p = new node(q.front_p->data, NULL);

但是如果 q.front_p 为 NULL(另一个队列为空)怎么办?

你的问题还在继续

while (q != NULL)

q 不是可以为 NULL 的指针。假设您想遍历 q 中包含的项目列表,从 q->front_p.

开始