2016-01-23 66 views
0

我想了解一些我在互聯網上偶然發現的C++代碼。這是來自NVIDIA的Flex演示,其中包括令人敬畏的新流體模擬,所以我在代碼中進行了一些窺視。在那裏,我看到了一些我不明白的東西:在scene.h中有一個名爲Scene的類。它沒有包含,但它使用了helpers.h文件中的CreateRandomConvex函數。它們都只包含在main.cpp中,但它沒有使用它們中的任何一個。 所以我現在的問題是:Scene類如何在不包含它的情況下訪問helpers函數?如果Scene類沒有include,編譯器如何知道他可以從哪裏獲得CreateRandomConvex函數?瞭解#includes C++

代碼: 主:

#include "B.h" 
#include "A.h" 

int main() 
{ 

} 

啊:(場景)

#pragma once 
class Scene 
{ 
    void Init() 
    { 
     CreateRandomConvex(); 
    } 
}; 

了Bh:(助手)

#pragma once 
void CreateRandomConvex() 
{ 
    //calc some stuff 
} 

回答

1

#include "A.h"字面意思是「在此插入文件的內容」A.h「」。

所以編譯主文件時,編譯器看到

void CreateRandomConvex() 
{ 
    //calc some stuff 
} 

class Scene 
{ 
    void Init() 
    { 
     CreateRandomConvex(); 
    } 
}; 

int main() 
{ 

} 

作爲一個側面說明,有一個頭依賴於另一個已經有被列入不是一個非常好的做法。

+0

作爲一個方面說明,在編譯預編譯頭文件時,您總是可以依賴於這樣一個事實,即所有屬於預編譯頭文件的部分都將包含在任何其他頭文件之前。 –

+0

所以一個包含並不意味着:如果你不知道什麼,請在包含中查找它。而是:寫在那裏的一切都應該寫在這裏 – Dynamitos

+0

@Dynamitos正是如此。 – molbdnilo

0

要包括A.h在CPP文件,你必須包括事先在該CPP文件中的文件B.h

有人可能會認爲這是不好的做法。但它的工作。