我编写了代码,我在main之外定义了一个结构,用于类的排队链表。它基本上看起来像这样:
class Queue
{
public:
void enqueue (int x);
void dequeue ();
void print ();
};
struct queueNode
{
int data;
queueNode * next;
queueNode * prev;
};
queueNode * head;
queueNode * tail;
queueNode * n;
//class functions that use head, tail, and n
int main ()
{
//functions that use head, tail, and n
return 0;
}
这是一个非常非常精简的版本,但是你可以了解它。
问题是,现在我将它分成不同的文件,我无法弄清楚将头部,尾部或n放在哪里。
如果我把它们放在标题中,它们就不会被括起来,所以它们不能只是头文件的尾端。
如果我将它们放在实现文件中,那么main就无法访问它们。我不能#include实现文件,因为它是一个重新定义。
如果我把它们放在main中,它们就无法访问实现文件。
我应该把它们放在哪里?有某种约定吗?
答案 0 :(得分:1)
我会这样做:
类和结构的声明 - >标题(或单独的标题)。节点变量将被放入源文件(c或cpp),不能直接从外部访问;如果其他源文件需要访问它们 - 您可以为此提供get / set函数。对于源文件也应该来实现类'方法,如果它们不是内联的。
答案 1 :(得分:0)
如果你想拥有
queueNode * head;
queueNode * tail;
queueNode * n;
可以通过你的main函数访问,你通常会将它们放在一个头文件中,以包含在你想要的位置(因为包括一个头文件只是复制粘贴它)或者只是在主函数的主函数上面声明它们。 cpp文件。就这么简单。
像所说的那样,虽然通常最好将定义(类/结构和成员轮廓)放在头文件中以包含在顶部。并充实了源文件中的功能。通常在声明一个变量/对象时,你就可以在你需要它的地方旁边做,除非需要多个地方,在这种情况下只需将它打入带有包含警卫的标题就可以了。 例如:
的main.cpp
#include "queue.h"
#pragma once
queueNode * head;
queueNode * tail;
queueNode * n;
//class functions that use head, tail, and n
int main ()
{
//functions that use head, tail, and n
return 0;
}
queue.h
class Queue
{
public:
void enqueue (int x);
void dequeue ();
void print ();
};
struct queueNode
{
int data;
queueNode * next;
queueNode * prev;
};
queue.cpp
#include "queue.h"
//queue and other methods should go here.
请记住,如果您编译多个没有ide的源文件,则需要将它们链接在一起。
答案 2 :(得分:-1)
在Queue类中嵌套Node类,创建Queue的tail,head和n个成员。
class Queue {
public:
struct Node {
int data_;
Node * next_;
Node * prev_;
Node (const Node& n) : next_ (n.next_), prev_ (n.prev_){}
};
void enqueue (int x);
void dequeue ();
void print ();
Node* n () const {return n_;} //read only
Node*& n () {return n_;} //read and write
private :
Node * head_;
Node * tail_;
Node * n_;
};
在main中,可以清楚地访问成员尾部和队列,并且有关Queue的所有内容都在一个文件中:
int main () {
//functions that use head, tail, and n
Queue queue;
Queue::Node *node (queue.n ());
return 0;
}