鱼C论坛

 找回密码
 立即注册
查看: 1139|回复: 1

[已解决]函数未定义的引用问题

[复制链接]
发表于 2023-11-21 10:30:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
PhysicsList.cc文件里面的   fPMessenger = new PhysicsListMessenger(this);报错
PhysicsList.cc:(.text+0x1d9):对‘PhysicsListMessenger::PhysicsListMessenger(PhysicsList*)’未定义的引用

PhysicsList.cc文件

  1. #include "PhysicsList.hh"

  2. #include "G4HadronPhysicsQGSP_BIC_HP.hh"
  3. #include "G4EmLivermorePhysics.hh"
  4. #include "G4EmStandardPhysics.hh"
  5. #include "G4RadioactiveDecayPhysics.hh"
  6. #include "G4IonElasticPhysics.hh"
  7. #include "G4EmStandardPhysics_option4.hh"
  8. #include "G4EmPenelopePhysics.hh"
  9. #include "G4EmExtraPhysics.hh"
  10. #include "G4DecayPhysics.hh"
  11. #include "G4HadronElasticPhysicsHP.hh"
  12. #include "G4HadronPhysicsFTFP_BERT_HP.hh"
  13. #include "G4StoppingPhysics.hh"
  14. #include "G4OpticalPhysics.hh"
  15. #include "G4IonPhysics.hh"
  16. #include <stdio.h>

  17. #include "PhysicsListMessenger.hh"
  18. #include "G4EmLowEPPhysics.hh"
  19. #include "G4SystemOfUnits.hh"
  20. #include "G4LossTableManager.hh"

  21. using namespace std;


  22. PhysicsList::PhysicsList() : G4VModularPhysicsList(),
  23.                              fUseMIFlag(true),
  24.                              fPMessenger(0)
  25. {
  26.     G4LossTableManager::Instance();

  27.     // set default cuts value
  28.     defaultCutValue = 1 * eV;

  29.     // define the messenger
  30.    fPMessenger = new PhysicsListMessenger(this);

复制代码


PhysicsList.hh

  1. #include "G4VModularPhysicsList.hh"
  2. class G4VPhysicsConstructor;
  3. class PhysicsListMessenger;
  4. /// Modular physics list
  5. ///
  6. /// It includes the folowing physics builders
  7. /// - G4DecayPhysics
  8. /// - G4RadioactiveDecayPhysics
  9. /// - G4EmStandardPhysics

  10. class PhysicsList: public G4VModularPhysicsList
  11. {
  12. public:
  13.   PhysicsList();
  14.   virtual ~PhysicsList();

  15.   virtual void SetCuts();


  16.     //for the Messenger
  17.     void SetDefaultCutsValue(G4double);
  18.     void SelectPhysicsList(const G4String& name);
  19.     void SetUseMIFlag(G4bool val){fUseMIFlag = val;};
  20.     G4bool GetUseMIFlag(){return fUseMIFlag;};

  21. private:
  22.     PhysicsList & operator = (const PhysicsList &right);
  23.     PhysicsList(const PhysicsList&);

  24.     G4VPhysicsConstructor* fParticleList;
  25.     G4VPhysicsConstructor* fEmPhysicsList;

  26.     G4bool fUseMIFlag;

  27.     PhysicsListMessenger* fPMessenger;
  28. };
  29. #endif

复制代码



PhysicsListMessenger .hh
  1. #ifndef PhysicsListMessenger_h
  2. #define PhysicsListMessenger_h 1

  3. #include "globals.hh"
  4. #include "G4UImessenger.hh"

  5. class PhysicsList;

  6. class G4UIdirectory;
  7. class G4UIcmdWithAnInteger;
  8. class G4UIcmdWithADoubleAndUnit;
  9. class G4UIcmdWithAString;
  10. class G4UIcmdWithABool;
  11. class PhysicsListMessenger : public G4UImessenger
  12. {
  13. public:
  14.     PhysicsListMessenger(PhysicsList*);
  15.     virtual ~PhysicsListMessenger();

  16.     virtual void SetNewValue(G4UIcommand*, G4String);

  17. private:
  18.     PhysicsList* fPhysicsList;
  19.     G4UIdirectory* fPhysDir;
  20.     G4UIcmdWithADoubleAndUnit* fCutsCmd;
  21.     G4UIcmdWithAString* fListCmd;
  22.     G4UIcmdWithABool* fUseMIFlagCmd;
  23. };

  24. #endif
复制代码



PhysicsListMessenger。cc

  1. #include "PhysicsListMessenger.hh"
  2. #include "PhysicsList.hh"

  3. #include "G4UIdirectory.hh"
  4. #include "G4UIcmdWithAnInteger.hh"
  5. #include "G4UIcmdWithADoubleAndUnit.hh"
  6. #include "G4UIcmdWithAString.hh"
  7. #include "G4UIcmdWithABool.hh"

  8. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  9. PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys):
  10.         G4UImessenger(),
  11.         fPhysicsList(pPhys)
  12. {
  13.     fPhysDir = new G4UIdirectory("/phys/");
  14.     fPhysDir->SetGuidance("PhysicsList control");

  15.     fCutsCmd = new G4UIcmdWithADoubleAndUnit("/phys/setCuts",this);
  16.     fCutsCmd->SetGuidance("set cuts");
  17.     fCutsCmd->SetParameterName("cuts",false);
  18.     fCutsCmd->SetUnitCategory("Length");
  19.     fCutsCmd->SetRange("cuts>0.");
  20.     fCutsCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
  21. }
复制代码

最佳答案
2023-11-21 10:31:01
这个错误通常是由于未正确链接PhysicsListMessenger类的构造函数引起的。首先,确保PhysicsListMessenger类的构造函数在PhysicsListMessenger.cc文件中被正确实现。然后,在编译和链接代码时,确保将PhysicsListMessenger.cc文件包含在编译过程中,以便正确链接到PhysicsList.cc文件。

另外,建议检查Makefile或项目配置文件,确保PhysicsListMessenger.cc文件被正确包含在编译过程中。如果Makefile或项目配置文件正确配置了PhysicsListMessenger.cc文件,但仍然出现该错误,可能是由于其他编译选项或依赖关系导致的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-21 10:31:01 | 显示全部楼层    本楼为最佳答案   
这个错误通常是由于未正确链接PhysicsListMessenger类的构造函数引起的。首先,确保PhysicsListMessenger类的构造函数在PhysicsListMessenger.cc文件中被正确实现。然后,在编译和链接代码时,确保将PhysicsListMessenger.cc文件包含在编译过程中,以便正确链接到PhysicsList.cc文件。

另外,建议检查Makefile或项目配置文件,确保PhysicsListMessenger.cc文件被正确包含在编译过程中。如果Makefile或项目配置文件正确配置了PhysicsListMessenger.cc文件,但仍然出现该错误,可能是由于其他编译选项或依赖关系导致的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表