无法正确访问我在另一个 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_p
和 back_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
.
开始
我目前正在为我的队列开发一个深度复制构造函数 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_p
和 back_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
.