2012-03-24 113 views
0

我正在使用前向声明并包含在一个小型项目中。前向声明和包括

但有时如果我创建了一个文件。

甲包含C和D.

然后在乙包括​​A,C,d我有一些问题,我增加向前声明它。

我注意到,有时我只是需要前向声明,这是因为当我以前将它添加到一个文件中,我包含在前向声明的文件中? 就像我刚刚在B中包含A一样,那么C和D也包含在内? 我有一个类,我只需要添加前向声明。 像:

Class a; 
Class b; 
Class R{ 
} 

然后将文件包括R,所以我并不需要在R中的一个,如果我这样做,该代码没有编译。它说要在{之前声明一个类。

另一种情况是:

正向申报B,但不包括B和B包括A ..它的作品,我想它的,因为当时的编译器“贴”在B中的一个代码,向前声明告诉编译器该类在代码中。如果我使用ifdef/ifndef并在其中包含代码b,它会崩溃,如果我删除包含它作为魅力^^

谢谢。

+3

你的问题是什么?一般来说,有些情况下前向声明就足够了。但我看不出你的问题是什么。 – 2012-03-25 00:01:33

+0

不,它只是一个例子 – Lefsler 2012-03-25 00:14:13

+0

stackoverflow是一个问答网站。看看FAQ是什么被认为是一个很好的问题,以及如何问一个问题。你看到的问题(没有标题守卫,加入它们会导致崩溃)会指出你的代码存在一些更大的问题。 – pmr 2012-03-25 00:49:31

回答

-1

我太累了,无法考虑你在那里的所有依赖关系,但请记住#include只不过是将包含的文件完全插入到#include的位置。这是递归完成的,直到所有的#include指令被展开。

这也是很好的典型

#ifndef FILE_H 
#define FILE_H 
... 
#endif 
+1

也许你不应该回答,如果你太累了,不想回答这个问题,或者问题没有得到回答? – pmr 2012-03-25 00:03:28

1

防范同一文件的多个插入除非你是引入循环依存关系,可以用前向声明被打破,只需要使用一个#ifndef/#endif对:

#ifndef _FILE_H_ 
#define _FILE_H_ 

/* ... header file specifications ... */ 

#endif /* _FILE_H_ */ 
+0

它的东西就像一个前向声明B,但不包括B和B包括A ..它的工作原理,我想它是因为编译器“粘贴”B代码的时间,前向声明告诉编译器该类是在代码中。如果我使用ifdef/ifndef并在代码中包含代码b,它会崩溃,如果我删除包含它作为魅力^^。 – Lefsler 2012-03-25 00:08:56

+0

我明白了。这为这个问题带来了一些清晰。 – 2012-03-25 00:15:41

+0

那么它发生了什么? XD,只是为了确认 – Lefsler 2012-03-25 00:16:41