【问题标题】:Error with parameter constructors: Error C2511参数构造函数出错:错误 C2511
【发布时间】:2021-10-24 23:06:41
【问题描述】:

刚开始使用 OOP。在我的源文件中调用参数构造函数时遇到错误:

错误 C2511 'EuroVanillaOption::EuroVanillaOption(const double,const double,const double,const double,const double)':在 'EuroVanillaOption' 欧元期权计算器中找不到重载的成员函数。

这是什么原因?与文件名或类对象名有关吗?

另外,在 VScode 中,在参数构造函数的标头声明下会显示一条绿色波浪线警告,说“未找到 EuroVanillaOption 的函数定义”,这是一个相关问题吗?

最后,预处理器指令的末尾出现错误,它定义了名称_Euro_Vanilla_Option_H 说“预期的声明”,为什么?

...
EuroVanillaOption::EuroVanillaOption(const double _s, const double _K,
                                     const double _T, const double _r,
                                     const double _sigmaVOL) {
    s = _s;
    K = _K;
    T = _T;
    r = _r;
    sigmaVOL = _sigmaVOL;


} 

标题声明

public:
    EuroVanillaOption();                                    
    EuroVanillaOption(const double& _s, const double& _K,   
                      const double& _T, const double& _r,
                      const double& _sigmaVOL); 

【问题讨论】:

  • 旁注:您可能会发现Member Initializer List 很有用。请注意,这里不像其他地方那么有用。

标签: c++ class oop parameters constructor


【解决方案1】:

签名不一样。在标题中,您传递引用。在 .cpp 中,没有引用。他们需要匹配。 (请参阅标题中的& 符号。)

将这些作为参考传递会很奇怪。摆脱&

【讨论】:

  • 旁注:_K 是标识符reserved for use by the implementation,应避免使用。打破这条规则并不会经常让你吃到苦头,但如果这样做,结果可能几乎是难以理解的。
  • 感谢您的回复。应该注意到这一点。为什么将参数作为参考传递会很奇怪?它不会产生更少的开销吗?
  • @JoeP 不适用于像双精度数这样的简单数据类型。在幕后,它必须传递指针,然后这些指针得到解引用。对于复杂的数据类型更有效。
猜你喜欢
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多