无法正确访问在另一个类的私有区域内声明的类

时间:2015-03-01 19:31:17

标签: c++ queue copy-constructor deep-copy

我目前正在为我的队列类开发一个深层复制构造函数,而且我对使用封装在私有区域中的数据进行正确访问的技术感到困惑。

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未包含在内,因此如果有些人认为queue.cpp是主文件,则没有int main。这是queue.h的实现

因此,为了解释我的代码应该做什么,我将复制构造函数Queue类的一个实例传递给复制构造函数,我想访问q中的数据。我已经尝试过使用q.data,但是效果并不好,我意识到&#34;数据&#34;我正在尝试访问在另一个班级。

当然我想也许我应该尝试做像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);

1 个答案:

答案 0 :(得分:1)

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

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中包含的项目列表。