【问题标题】:methods declared, but never defined in Geant4 source code方法已声明,但从未在 Geant4 源代码中定义
【发布时间】:2011-06-05 16:08:20
【问题描述】:

在搜索 Geant4 源代码期间,我多次注意到在标头中声明了一些方法,但从未使用任何相关代码定义(请原谅我的术语中的任何虚假(我是工程师)) .

一个例子是这样定义的方法:

G4TrackVector* GetfSecondary();

在头文件或源文件中没有实现,不是虚拟的,但它被程序在各种场合使用,程序从这个编译的代码运行。起初我以为这只是 doxygen 的一些很酷的代码隐藏技巧,但现在我发现它不是!这在代码中很常见。

有人能解释一下发生了什么吗?

谢谢

【问题讨论】:

  • @user487100 您还不能发表评论,因为您的帐户没有提出问题并且得分低于 50。如果Johnny 是您的另一个帐户,请使用这些凭据登录,您将能够发表评论。或者,提出好的问题并给出好的答案,您就可以在任何地方发表评论;)

标签: c++ methods header implementation hidden


【解决方案1】:

GetSecondary() 函数是 G4Step 类的成员(在 G4Step.hh 中定义)并在 G4Step.icc 中内联实现。 G4Step.icc 包含在 G4Step.hh 的末尾。

我猜你是在源目录而不是包含目录中查找实现,但包含目录是内联实现的合适位置。

如果你以后在 *nix 上,你可以尝试从项目目录顶部的 grep -r <FunctionName> . 来查找所有提及的函数,其中应该包括实现。

【讨论】:

    【解决方案2】:

    如果是这种情况,代码将无法编译。你只是没有在正确的地方寻找它的定义。或者只是没有注意到它。调用没有定义的声明函数错误。

    【讨论】:

    • 从技术上讲,它可以正常编译但无法链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多