我有一個稱爲A類,它有它的.cpp
和.hpp
文件。它取決於類別B
和C
。現在,我想知道,我應該在A.cpp
或A.hpp
#include B.hpp
和#include C.hpp
?我認爲這將是對我有益的#include
在A.hpp
文件,因爲我創建的B*
的一個載體,我不知道,編譯器會知道的B
正確的大小,如果我只能向前聲明它(所以我不能正確地指出增量)......通過「前向聲明」,我的意思是在的開始處寫入class B;
和class C;
。可以在.hpp文件中包含嗎?
0
A
回答
3
前面已經提到的,你經常可以變通不必#include
東西使用前聲明,並且確實是最好的做法是儘量減少包括其他頭的量。
但是:回答您的問題標題:是的,你可以,和普通的機制,以避免「夾雜」是以下
A.hpp:
#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED
... // code
#endif
現在如果說B.hpp包括A.hpp,隨後,C.hpp樣子:
#ifndef C_HPP_INCLUDED
#define C_HPP_INCLUDED
#include "A.hpp"
#include "B.hpp"
...
#endif
這樣你就不會得到一個錯誤,指出如'A類'已經被定義。
1
如果它是B*
一個向量,你並不需要在另一頭B.hpp
。前向聲明沒問題。指針具有相同的大小,不管它們指向什麼。
它最好有包括只在必要時,這肯定看起來像它不是。
1
我不知道如果我理解你的類層次結構,在我心裏是這樣的:
B.hpp
class B
{
B();
};
B.cpp
B::B() {};
C.hpp
class C
{
C();
};
A.cpp
A::A() {};
A.hpp
class A
{
A();
B *b;
C *C;
};
A.cpp
#include "B.hpp"
#include "C.hpp"
A::A() :
b(NULL), c(NULL)
{
};
這是正確的嗎? (如果沒有,請考慮提供一些代碼;)如果您的class A
有指向class B
和class C
的前向聲明必須是唯一需要的。
我不知道,編譯器會知道B的正確尺寸,如果我只能向前聲明它
是的,只要你有在A.cpp
文件B.hpp
和C.hpp
編譯器將能夠推斷出其大小(班級大小,指針大小始終相同)。爲什麼?僅僅因爲在cpp
文件中它知道由於#include
而產生的正確尺寸。我發現this answer,這將有助於理解我想說的。
將在hpp
文件,而不是罰款?也許,如果您的A.hpp
不會包含在其他文件中,則class B
和class C
不會打擾並傳播到其他文件中。所以,如果情況不是必需的。但恕我直言最好的做法是轉發聲明並#include
在cpp
文件時,它是可能的。
相關問題
- 1. 爲什麼.hpp文件將包含在.h文件中?
- 2. 可以包含嵌套的文件嗎?
- 3. NDK可以包含.lib文件嗎?
- 4. 您可以重載.hpp文件中的全局運算符嗎?
- 5. 我可以在我的Chrome擴展中包含CryptoJS文件嗎?
- 6. JSUnit文件可以包含在PHPUnit測試中嗎?
- 7. 我可以在PHP中包含XSL文件嗎?
- 8. 我可以在PHP代碼中包含C文件嗎?
- 9. 我可以在JavaScript中包含另一個源文件嗎?
- 10. 我們可以在udcx文件中包含where子句嗎?
- 11. Solr可以在文件中包含多語言停用詞嗎?
- 12. 你可以在Perl文件中包含PHP嗎?
- 13. 可以在類似於css的html文件中包含`templates`嗎?
- 14. 將外部文件包含在緩存清單中可以嗎?
- 15. 在ngShow中可以包含Class嗎?
- 16. var_prompt可以包含在角色中嗎?
- 17. NSMutableArray可以包含nil嗎?
- 18. Bundle.config可以包含ScriptBundles嗎?
- 19. 我可以在自己的.jar文件中包含persistence.xml文件嗎?
- 20. 可以在一個ant XML構建文件中包含一個XML文件嗎?
- 21. 我可以使用php包含xml文件中的元素嗎?
- 22. 是否可以在包含文件中使用包含文件作爲變量
- 23. 包含的文件包含它包含的文件嗎?
- 24. 我可以在另一個包含文件中使用包含文件的變量嗎?
- 25. PHP:數組可以包含文本和文件輸入嗎?
- 26. 如何在java中包含文件?在Eclipse IDE中可能嗎?
- 27. 我可以在Symfony2中包含一個可選的配置文件嗎?
- 28. cmake忽略.hpp文件更改嗎?
- 29. 我可以在我的軟件中包含codeigniter嗎?
- 30. 可以在php中包含的文件的名稱中使用變量嗎?
是,指針自己做所有的大小相同,但是當你增加一個指針,它的地址實際上是在內存由它指向的類型的大小切換。所以我想知道這個功能是否會因爲前向聲明而受到影響...... – corazza
編譯器會告訴你它是否只有前向聲明有問題;) – codeling
@Bane如果你分開實現,那很好。你是否在標題中移動指針?如果沒有,沒關係。 –