【问题标题】:No instance of constructor matches argument list没有构造函数实例匹配参数列表
【发布时间】:2016-11-21 14:20:56
【问题描述】:

我知道之前有人问过这个问题,我已经尝试过发布的解决方案,但由于某种原因我仍然无法解决我面临的问题。

我正在尝试创建派生类的对象。但是,我收到一条错误消息:

Error: no instance of constructor "CALibrary::YieldCurve::YieldCurve"
matches te argument list argument types are: (std::string,
std::vector<std::pair<double,double>,double>)

父类是:

namespace CALibrary {
  class YieldCurveIF {
  public:
    virtual double getDiscountFactor(double fromDate, double toDate) = 0;
      int getSize() {
        return _curve.size();
      }
      std::vector<std::pair<double, double>> getCurve() {
        return _curve;
      }

      void setParameters(std::string curveName,
                         std::vector<std::pair<double, double>>& curve)
      {
        _curveName = curveName;
        _curve = curve;
      }
  protected:
    std::string                            _curveName;
    std::vector<std::pair<double, double>> _curve;
  };
}

派生类是:

namespace CALibrary {
  class YieldCurve : public CALibrary::YieldCurveIF
  {
  public:
    YieldCurve(std::string curveName,
               std::vector<std::pair<double, double>>& curve)
    {           
      setParameters(curveName, curve);
    }
    double getDiscountFactor(double fromDate, double toDate);
    private:
  };
}

这是我试图创建 YieldCurve 对象的代码:

int nPayments = 4;
std::string curveName = "EURCurve"; 
std::vector<std::pair<double, double>, double> yCurve(nPayments);
CALibrary::YieldCurve   _yieldCurve(curveName, yCurve);

【问题讨论】:

  • 错误发生在“CALibrary::YieldCurve _yieldCurve(curveName, yCurve);”行尤其是变量“curveName”。
  • 您是否尝试过修复 yCurve 的类型(最后一段代码的第 3 行)?第三个double 不应出现。

标签: c++ c++11 inheritance


【解决方案1】:

yCurve 有一个废话类型

std::vector<std::pair<double, double>, double>

去掉末尾的,double

此外,您的代码在两个地方应该采用std::vector&lt;std::pair&lt;double, double&gt;&gt; const&amp; 时采用std::vector&lt;std::pair&lt;double, double&gt;&gt;&amp;

【讨论】:

  • 感谢及时回复
  • 对不起 Yakk 我不太清楚何时使用“const”。你能解释一下为什么我的代码应该在两个地方使用“std::vector<:pair>> const&”吗?谢谢
  • @Ace 你在修改什么吗?如果您没有直接或间接地修改某些内容,则应通过const&amp; 而不是&amp; 进行修改。 setParameters是否修改了vector是通过的?
  • ,不,“setParameters”将父类中的“_curve”设置为“setParameters”方法中传递的“curve”。其他类可以使用“getDiscountFactor”方法从“_curve”中检索值。我使用“&”的唯一原因是因为我不希望编译器在调用“setParameters”方法时创建另一个“曲线”副本。我认为通过引用传递会更有效。
  • @ace _curvecurve 不是同一个变量,你复制= 中的数据。所以,不,你错了。
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2021-07-02
  • 2016-03-05
  • 2013-10-29
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多