методы объявлены, но никогда не определены в исходном коде Geant4 - PullRequest
2 голосов
/ 05 июня 2011

Во время поисков по исходному коду Geant4 я несколько раз замечал, что есть методы, которые объявлены в заголовке, но никогда не определяются с каким-либо ассоциированным кодом (извините за любые ошибки в моем жаргоне (я инженер)).

Примером может быть метод, определенный следующим образом:

G4TrackVector* GetfSecondary();

, который не имеет реализации в заголовке или исходном файле, не является виртуальным, и тем не менее он используется в различных случаяхпрограмма и программа запускаются из этого скомпилированного кода.Сначала я думал, что это просто классный трюк с сокрытием кода с помощью Doxygen, но теперь я вижу, что это не так!Это обычное явление в коде.

Может кто-нибудь объяснить, что происходит?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Функция GetSecondary() является членом класса G4Step (определен в G4Step.hh) и встроена в G4Step.icc.G4Step.icc включен в конец G4Step.hh.

Я предполагаю, что вы искали в каталоге исходных файлов вместо каталога include для реализации, но каталог include является лучшим местом для внутренней реализации.

В будущем, если вы используете * nix, вы можете попробовать grep -r <FunctionName> . в верхней части каталога проекта, чтобы найти все упоминания функции, которая должна включать реализацию.

0 голосов
/ 05 июня 2011

Код не скомпилируется, если бы это было так.Вы просто не ищете правильное место для его определения.Или просто не замечать этого.Вызов объявленной функции без определения является ошибкой.

...