鱼C论坛

 找回密码
 立即注册
查看: 956|回复: 4

[已解决]c++ ,prototype问题,申明和使用不匹配?

[复制链接]
发表于 2023-7-24 22:50:23 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 猪猪虾 于 2023-7-24 22:54 编辑

捕获.JPG

  1. //
  2. /// \file ActionInitialization.hh
  3. /// \brief Definition of the B3b::ActionInitialization class

  4. #ifndef B3bActionInitialization_h
  5. #define B3bActionInitialization_h 1

  6. #include "G4VUserActionInitialization.hh"

  7. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
  8. namespace B3
  9. {
  10.     class DetectorConstruction;
  11. }

  12. namespace B3b
  13. {

  14. /// Action initialization class.

  15. class ActionInitialization : public G4VUserActionInitialization
  16. {
  17.   public:
  18.     ActionInitialization(B3::DetectorConstruction* detConstruction);
  19.     ~ActionInitialization() override;

  20.     void BuildForMaster() const override;
  21.     void Build() const override;

  22. private:
  23.     B3::DetectorConstruction* fdetectorConstruction = nullptr;
  24. };

  25. }

  26. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  27. #endif

复制代码


  1. //
  2. /// \file ActionInitialization.cc
  3. /// \brief Implementation of the B3b::ActionInitialization class

  4. #include "ActionInitialization.hh"
  5. #include "RunAction.hh"
  6. #include "PrimaryGeneratorAction.hh"
  7. #include "StackingAction.hh"
  8. #include "PrimaryGeneratorAction.hh"
  9. #include "DetectorConstruction.hh"
  10. #include "Run.hh"
  11. using namespace B3;

  12. namespace B3b
  13. {

  14. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
  15. ActionInitialization::ActionInitialization(DetectorConstruction* detConstruction)
  16. :fdetectorConstruction(detConstruction)
  17. {}

  18. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  19. ActionInitialization::~ActionInitialization()
  20. {}

  21. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  22. void ActionInitialization::BuildForMaster() const
  23. {
  24.   SetUserAction(new RunAction);
  25. }

  26. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  27. void ActionInitialization::Build() const
  28. {

  29.   SetUserAction(new RunAction);
  30.   SetUserAction(new PrimaryGeneratorAction(fdetectorConstruction));
  31.   SetUserAction(new StackingAction);
  32. }

  33. //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

  34. }


  35. #endif
复制代码
最佳答案
2023-7-24 22:50:39
从你提供的错误信息来看,问题出在 ActionInitialization 类的构造函数声明和定义不匹配。

根据错误信息,构造函数的原型(声明)是 ActionInitialization::ActionInitialization(B3b::DetectorConstruction*),但在类的定义中,构造函数是 ActionInitialization::ActionInitialization(DetectorConstruction* detConstruction)

错误的原因可能是类 B3b::DetectorConstruction 的前缀被遗漏或者参数名称不匹配。为了解决这个问题,你需要做以下步骤:

1. 确保在构造函数的声明和定义中使用相同的类名作为参数类型。检查 DetectorConstruction 类的前缀是否为 B3b::
2. 检查参数名称是否一致,包括大小写。确保在构造函数的声明和定义中使用相同的参数名称。

下面是一个示例,展示如何修正构造函数声明和定义的不匹配问题:

  1. // 在声明中添加正确的前缀 'B3b::'
  2. ActionInitialization::ActionInitialization(B3b::DetectorConstruction* detConstruction);

  3. // 在定义中使用相同的参数类型和名称
  4. ActionInitialization::ActionInitialization(B3b::DetectorConstruction* detConstruction) {
  5.     // 构造函数的实现代码
  6. }
复制代码


请根据实际情况检查和修改构造函数的声明和定义,确保它们匹配并且编译通过。

希望这个回答对你有所帮助。如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-24 22:50:35 | 显示全部楼层
这个错误提示是因为您在类 B3b::ActionInitialization 的构造函数声明中的参数类型与定义的不一致导致的。以下是解决该问题的具体步骤:

1. 在类 B3b::ActionInitialization 的声明中,找到构造函数的原型声明。应该类似于:
  
  1.    ActionInitialization(DetectorConstruction* detConstruction);
  2.    
复制代码

2. 确保在类的定义部分中,构造函数的定义与原型声明一致。可以修改为:
  
  1.    B3b::ActionInitialization::ActionInitialization(DetectorConstruction* detConstruction) {
  2.        // 构造函数的具体实现
  3.    }
  4.    
复制代码

请注意,如果 B3b::ActionInitialization 类的构造函数已经在其他地方进行了定义,那么可能会出现重复定义的错误。此时,您需要确保只有一个正确的构造函数定义。

希望这些步骤能够帮助您解决问题。如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 22:50:39 | 显示全部楼层    本楼为最佳答案   
从你提供的错误信息来看,问题出在 ActionInitialization 类的构造函数声明和定义不匹配。

根据错误信息,构造函数的原型(声明)是 ActionInitialization::ActionInitialization(B3b::DetectorConstruction*),但在类的定义中,构造函数是 ActionInitialization::ActionInitialization(DetectorConstruction* detConstruction)

错误的原因可能是类 B3b::DetectorConstruction 的前缀被遗漏或者参数名称不匹配。为了解决这个问题,你需要做以下步骤:

1. 确保在构造函数的声明和定义中使用相同的类名作为参数类型。检查 DetectorConstruction 类的前缀是否为 B3b::
2. 检查参数名称是否一致,包括大小写。确保在构造函数的声明和定义中使用相同的参数名称。

下面是一个示例,展示如何修正构造函数声明和定义的不匹配问题:

  1. // 在声明中添加正确的前缀 'B3b::'
  2. ActionInitialization::ActionInitialization(B3b::DetectorConstruction* detConstruction);

  3. // 在定义中使用相同的参数类型和名称
  4. ActionInitialization::ActionInitialization(B3b::DetectorConstruction* detConstruction) {
  5.     // 构造函数的实现代码
  6. }
复制代码


请根据实际情况检查和修改构造函数的声明和定义,确保它们匹配并且编译通过。

希望这个回答对你有所帮助。如果你还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 22:50:56 | 显示全部楼层
从你的错误消息来看,问题出在 B3b::ActionInitialization::ActionInitialization(B3b::DetectorConstruction*) 的声明和实现不匹配。在C++中,函数的原型(prototype)需要在头文件(.h或.hpp)中声明,在源文件(.cpp)中实现,并且两者的签名(即返回类型,函数名和参数列表)必须完全一致。

针对您的问题,一种可能的情况是,你在头文件中声明的 ActionInitialization 构造函数可能并没有接受一个指向 B3b::DetectorConstruction 的指针的参数。然后在实现时,你却提供了这个参数。

所以,你需要检查一下你的头文件和源文件,确认两者的声明和实现是否完全匹配。具体来说,应该是这样的:

在你的头文件中(假设是 ActionInitialization.h ):

  1. namespace B3b {
  2.     class DetectorConstruction;
  3.    
  4.     class ActionInitialization {
  5.     public:
  6.         ActionInitialization(DetectorConstruction* detConstruction);
  7.         // 其他的成员函数和变量...
  8.     };
  9. }
复制代码


然后在你的源文件中(假设是 ActionInitialization.cpp ):

  1. #include "ActionInitialization.h"
  2. #include "DetectorConstruction.h"

  3. B3b::ActionInitialization::ActionInitialization(DetectorConstruction* detConstruction) {
  4.     // 函数体...
  5. }
复制代码


希望这个解答可以帮助你解决问题,如果还有其他问题,欢迎继续提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 22:58:09 | 显示全部楼层
抵制AI
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 23:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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