2011-06-05 28 views
2

期間通過GEANT4源代碼,我的搜索沒有定義過,我已經注意到了幾次,有哪些是在頭部聲明但從未與任何相關的代碼中定義的方法(請原諒任何錯謬在我的行話(我是一名工程師))。方法聲明,但在GEANT4源代碼

一個例子是一個方法定義如下:

G4TrackVector* GetfSecondary(); 

其具有在報頭或源文件中沒有實現中,不是虛擬的,但它是由程序和該程序中使用的各種場合從此編譯的代碼運行。起初,我認爲這只是一個很酷的代碼與doxygen隱藏技巧,但我現在看到它不是!這在代碼中很常見。

有人能解釋這是怎麼回事?

謝謝

+0

@ user487100因爲您的帳戶沒有問這個問題,有不到50點,你不能評論。如果'Johnny'是您的另一個帳戶,請使用這些憑據登錄,您將能夠發表評論。另外,提出好的問題,並給出很好的答案,你就可以到處發表評論;) – phihag 2011-06-05 17:07:57

回答

0

如果是這種情況,代碼將無法編譯。你只是沒有在正確的地方尋找它的定義。或者只是沒有注意到它。調用沒有定義的聲明函數出錯。

+1

從技術上講,這將編譯好的,但未能聯繫起來。 – ildjarn 2011-06-05 16:53:31

1

GetSecondary()函數是G4Step類(在G4Step.hh定義)的成員,並在G4Step.icc直列實現。 G4Step.icc包含在G4Step.hh的末尾。

我猜你正在尋找的源目錄,而不是用於實施包括目錄,但包括dir是直列實施propper地方。

將來,如果您使用的是* nix,您可以嘗試從項目目錄頂部的grep -r <FunctionName> .查找所有提及的函數,其中應包括實現。